跟我学习Go语言(1)
array、slice 和map
array
array变量1
2
3
4var arr1 [10] int
arr2 := [3]int{1,2,3}
arr3 :=[…]int{1,2,1,3} //自动统计个数
a := [3][2]int { [2]int {1,2}, [2]int {3,4}, [2]int {5,6} }//多维数组
有一点需要注意:当向函数内传递一个数组的时候,它会获得一个数组的副本,而不是数组的指针。也就是说,数组做参数是值传递,不是引用传递,在函数内修改数组的元素,不会对函数外造成影响
slice
slice 与array 接近,但是在新的元素加入的时候可以增加长度。slice 总是指向底层的一个array。slice 是一个指向array 的指针,这是其与array 不同的地方;slice 是引用类型,这意味着当赋值某个slice到另外一个变量,两个引用会指向同一个array。
如果一个函数需要一个 slice 参数,在函数内对 slice 元素的修改也会体现在函数外的slice,这和传递底层的array 指针类似。
slice变量1
2
3sl := make([]int , 10) //创建了一个保存有10 个元素的slice。
s2 := arr2[2:3]
s3 := arr3[:]
map
许多语言都内建了类似的类型,例如Perl有哈希,Python有字典,而C++同样也
有map(作为库)。在Go中的map 类型可以认为是一个用字符串做索引的数
组(在其最简单的形式下)。
map定义1
2
3
4
5
6
7
8//map[<from type>]<to type>
monthdays := map[string] int {
"Jan": 31, "Feb": 28, "Mar": 31,
"Apr": 30, "May": 31, "Jun": 30,
"Jul": 31, "Aug": 31, "Sep": 30,
"Oct": 31, "Nov": 30, "Dec": 31, //逗号是必须的
}
//使用时,monthdays["Jun"]取值为30