数组
数组定义后长度固定
长度获取: len() 函数
所有的值类型变量在赋值,和作为参数传递时都将产生一次复制动作。
go数组是一个值类型,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所 传入数组的一个副本
创建
声明一个数组, 并且设置为零值
var array [5]int
使用数组字面量声明数组
// 声明一个包含5个元素的整形数组
// 用具体值初始化每个元素
array := [5]int{10, 20, 30, 40, 50}
自动计算长度的数组
// 声明一个整形数组
// 用具体值初始化每个元素
// 容量由初始化值得数量决定
array := [...]int{10, 20, 30, 40, 50}
声明数组并指定特定元素的值
// 声明一个包含5个元素的整形数组
// 用具体值初始化索引为1和2的元素
// 其余元素保持零值
array := [5]int{1:10, 2:20}
使用
访问数组元素
array := [5]int{10, 20, 30, 40, 50}
//修改索引为2的元素的值
array[2] = 25
访问指针数组的元素
// 声明包含5个元素的只想整形的数组
// 用整形指针初始化索引为1和2的数组元素
// 未赋值的 0, 3, 4 为 nil
array := [5]*int{1: new(int), 2: new(int)}
//为索引2的元素赋值
*array[2] = 25
把同样类型的一个数组赋值给另外一个数组
// 声明一个包含5个元素的字符串数组
var array1 [5]int
// 声明第二个包含5个元素的字符串数组
array2 := [5]int{10, 20, 30, 40, 50}
// 将array2复制给array1
array1 = array2
复制以后两个数组完全一样,使用的不是同一块内存。
数组变量的类型包括数组长度和每个元素的类型。只有这两部分相同的数组,才是类型相同的数组,才能互相赋值。
例如: [5]int 和[10]int 不是一个类型。
编译器会阻止类型不同的数组相互赋值
只要声明和赋值的数组类型和长度不一样就会报错。
// 声明一个包含4个元素的字符串数组
var array1 [4]int
// 声明第二个包含5个元素的字符串数组
array2 := [5]int{10, 20, 30, 40, 50}
// 将array2复制给array1
array1 = array2
// cannot use array2 (type [5]int) as type [4]int in assignment
把一个指针数组赋值给另一个
// 声明一个包含3个元素的指向字符串的指针宿主
var array1 [3]*string
// 声明第二个包含3个元素的指向字符串的指针数组
array2 := [3]*string{new(string), new(string), new(string)}
//赋值
*array2[1] = "Red"
//将array2 赋值给 array1
array1 = array2
复制以后,两个数组指向同一组字符串。