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来判断

 

posted @ 2017-11-23 16:23  你的KPI完成了吗  阅读(66)  评论(0)    收藏  举报