变量定义
- 未使用的变量编译会报错
:=
只能用于函数内部
数据类型
- 字符串是不可变的
var arr [n]type
定义数组,注意数组长度也是类型的一部分
var arr [10]int // 声明了一个int类型的数组
arr[0] = 42 // 数组下标是从0开始的
a := [3]int{1, 2, 3} // 声明了一个长度为3的int数组
b := [10]int{1, 2, 3} // 声明了一个长度为10的int数组,其中前三个元素初始化为1、2、3,其它默认为0
c := [...]int{4, 5, 6} // 可以省略长度而采用`...`的方式,Go会自动根据元素个数来计算长度
// 声明了一个二维数组,该数组以两个数组作为元素,其中每个数组中又有4个int类型的元素
doubleArray := [2][4]int{[4]int{1, 2, 3, 4}, [4]int{5, 6, 7, 8}}
// 上面的声明可以简化,直接忽略内部的类型
easyArray := [2][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}}
- slice、切片、动态数组:并不是真正意义上的动态数组,而是一个引用类型。
slice
总是指向一个底层array
,slice
的声明也可以像array
一样,只是不需要长度。 - map
// 初始化一个字典
rating := map[string]float32{"C":5, "Go":4.5, "Python":4.5, "C++":2 }
// map有两个返回值,第二个返回值,如果不存在key,那么ok为false,如果存在ok为true
csharpRating, ok := rating["C#"]
if ok {
fmt.Println("C# is in the map and its rating is ", csharpRating)
} else {
fmt.Println("We have no rating associated with C# in the map")
}
delete(rating, "C") // 删除key为C的元素
Tips
- 在Go语言中,同时声明多个常量、变量,或者导入多个包时,可采用分组的方式进行声明。
import(
"fmt"
"os"
)
const(
i = 100
pi = 3.1415
prefix = "Go_"
)
var(
i int
pi float32
prefix string
)
- 分析ssa
GOSSAFUNC=main go tool compile main.go