一、概述
1、特征
1.1、语法简单:规则严谨、保留指针、但默认阻止指针运算、将切片和字典作为内置类型、更好的维护性;
1.2、并发模型:运行时用GOroutine,一个关键字、简单而自然;搭配channel实现CSP模型;
1.3、内存分配:内存分配器完整保留了tcmalloc的原始架构,使用cache提供无锁分配、多个centrl在不通线程间平衡内存单元复用、heap管理大块内存;
1.4、垃圾回收:并发标记,逐步引入三色标记、写屏障;
2、简介
2.1、源文件:
源码文件使用UTF-8编码,对Unicode支持良好。package声明所属包名称,以".go"作为文件扩展名,语句结束分号默认省略,入口函数main没有参数,必须放在main包中,
用import导入标准库或第三方包
示例:
package main
import (
"fmt"
)
func main() {
fmt.Println("hello,world!")
}
可直接运行,或编译为可执行文件
go run main.go
2.2、变量
使用var定义变量,编译器总是被初始化为零值,避免出现意外状况,
示例一:
package main
func main() {
var x int32
var s = "hello,world!"
println(x,s)
}
在函数内部,还可省略var关键之,使用更简单的定义模式
示例二:
package main
func main() {
x := 100 //注意,赋值符号不同
println(x)
}
2.3、表达式
GO仅有三种流控制语句
if 示例:
package main
func main() {
x := 0
if x > 0 {
println("x")
} else if x < 0 {
println("-x")
} else {
println("0")
}
}
switch示例:
package main
func main() {
x := 100
switch {
case x > 0:
println("x")
case x < 0:
println("-x")
default:
println("0")
}
}
for 示例:
package main
// func main() {
// for i :=0; i < 5; i++ {
// println(i)
// }
// }
// func main() {
// for i :=4; i >= 0; i-- {
// println(i)
// }
// }
// func main () {
// x := 0
// for x < 5 { //相当于 while (x < 5) {...}
// println(x)
// x ++
// }
// }
// func main() {
// x := 4
// for {
// println(x) //相当于 while true {...}
// x--
// if x < 0 {
// break
// }
// }
// }
// 在迭代遍历时, for...range 除元素外,还可返回索引
func main() {
x := []int{100,101,102}
for i, n := range x {
println(i, ":", n)
}
}
输出:
