文章目录
  1. 1. array、slice 和map
    1. 1.1. array
    2. 1.2. slice
    3. 1.3. map

array、slice 和map

array

array变量

1
2
3
4
var 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
3
sl := 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

文章目录
  1. 1. array、slice 和map
    1. 1.1. array
    2. 1.2. slice
    3. 1.3. map