声明和初始化:
声明数组时需要指定内部存储的数据的类型,以及需要存储的元素的数量,这个数量也称为数组的长度
//声明一个包含5个元素的整型数组
var array [5]int
一旦声明,数组里存储的数据类型和数组长度就都不能改变了。如果需要存储更多的元素,就需要先创建一个更长的数组,再把原来数组里的值复制到新数组里。
//用具体值初始化每个元素
array := [5]int{10, 20, 30, 40, 50}
//用具体值初始化每个元素,容量由初始化的数量决定
array: = [...]int{10, 20, 30, 40, 50}
//用具体值初始化索引为1和2的元素,其余元素保持零值
array := [5]int{1: 10, 2: 20}
使用数组:
//访问数组某个单独元素,使用[]运算符
//修改索引为2的元素的值
array[2] = 35
可以声明一个所有元素都是指针的数组。使用*就可以访问元素指针所指向的值
//用整型指针初始化索引为0和1的数组元素
array := [5]*int{0: new(int), 1: new(int)}
//为索引为0和1的元素赋值
*array[0] = 10
*array[1] = 20
在Go语言里,数组是一个值。这意味着数组可以用在赋值操作中。变量名代表整个数组,因此,同样类型的数组可以赋值给另一个数组
注1:只有数组长度和每个元素类型相同的数组才能相互赋值
注2:复制数组指针,只会复制指针的值,而不会复制指针所指向的值,也就是说,复制的数组中元素指针指向的还是原来的值
var array1 [5]string
array2 := [5]string{"Red", "Blue", "Green"}
//把array2的值复制到array1
array1 = array2
多维数组:
数组本身只有一个维度,不过可以组合多个数组创建多维数组
//声明一个二维整型数组
var array [4][2]int
//使用数组字面量声明并初始化一个二维整型数组
array := [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}
在函数建传递数组:
使用数组指针传入函数,只需要在栈上分配8字节内存,性能更好。
注:不过由于传递的是指针,如果改变指针指向的值,会改变共享内存。
//分配一个需要8MB的数组
var array [1e6]int
//将数组的指针传递给函数foo
foo(&array)
func foo(array *[1e6]int) {
....
}