[golang] 数组
[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
背后的存储支撑类型而存在。