go语言学习笔记:复合数据类型
数组:
var a [3]int // Print the indices and elements. for i, v := range a { fmt.Printf("%d %d\n", i, v) } // Print the elements only. for _, v := range a { fmt.Printf("%d\n", v) } q := [...]int{1, 2, 3} //这表示数组的长度由初始化时候个数决定 fmt.Printf("%T\n", q) // "[3]int" r := [...]int{99: -1} //定义了一个含有100个元素的数组r,最后一个元素被初始化为-1,其它元素都是用0初始化。
切片:
切片看起来就是字符串的子串。切片其实是一个“指针”(它其实是一个复合类型,里面有指向数组位置的指针,长度和容量),所以传递给函数的时候,函数里面可以修改切片里的内容。而数组就不行了,数组传给函数的时候采用的是值传递。(其实传入切片的时候也是值传递嘛!)
数组可以用==来比较,而切片不能直接比较。
s := []int{0, 1, 2, 3, 4, 5} //切片的定义
var s []int //切片,nil
s := [...]int{0, 1, 2, 3, 4, 5} //数组的定义
s := [6]int{0, 1, 2, 3, 4, 5} //数组的定义
var s [6]int //数组的定义
// reverse reverses a slice of ints in place. func reverse(s []int) { //这里怎么确定s是切片类型还是数组类型呢? []int,这个是切片, [5]int, [...]int是数组 for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] = s[j], s[i] } } 这里我们反转数组的应用: a := [...]int{0, 1, 2, 3, 4, 5} reverse(a[:]) //写成带“:”的那么就是切片!!!!,如果只有a,那么就是传递数组。 fmt.Println(a) // "[5 4 3 2 1 0]"
var s []int // len(s) == 0, s == nil s = nil // len(s) == 0, s == nil s = []int{} // len(s) == 0, s != nil 如果你需要测试一个slice是否是空的,使用len(s) == 0来判断

浙公网安备 33010602011771号