[golang] 数组

数组的声明

如下,声明时需指定数组大小及类型,同时可指定的同时进行初始化,初始化时可只初始化部分元素。

var arr [3]int
// 或声明的同时进行初始化
var arr2 = [3]int{
	1, 2, 3,
}
// 或只初始化部分元素
var arr3 = [3]int{
	1: 99,
}
fmt.Println(arr, arr2, arr3)
// 结果: [0 0 0] [1 2 3] [0 0 99]

其中,当使用数组字面量进行初始化时,因为元素个数已知,所以声明时的大小可使用 ... 代替:

// 声明并初始化一个长度为 4 的数组
var arr4 = [...]int{
	1, 2, 3,
}

数组可可进行相等性比较:

fmt.Println(arr2 == arr4) // true

数组元素的访问

通过中括号加索引值获取对应位置的元素,当使用大于数组长度的索引进行访问时会报错。通过 len 函数可获取数组长度。

fmt.Println(arr4[2], len(arr4)) // 3 3
fmt.Println(arr4[3]) // 🚨 index 21 (constant of type int) is out of boundscompilerInvalidIndex

数组的限制

一般不直接使用数组,因为数组长度属于类型的一部分,即 [2]int[3]int 是两种类型,且数组长度无法动态指定,即使用变量作为长度,是编译时确定的。

也就意味着无法写出一个方法可以处理任意长度的数组。

不同长度数组之间无法进行类型转换。

数组一般作为另外一种数据结构 Slice 背后的存储支撑类型而存在。