声明和初始化
数组是一个由固定长度的相同特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组长度必须是一个常量表达式,并且必须是一个非负整数。数组长度也是数组类型的一部分,所以 [5]int
和 [10]int
是属于不同类型的。因为数组的长度是固定的,因此在Go语言中很少直接使用数组。和数组对应的类型是 Slice(切片),它是可以增长和收缩动态序列,slice功能也更灵活,但是要理解slice工作原理的话需要先理解数组。
数组相关声明及初始化语法:
var identifier [len]Type
identifier := [n]Type{v1,v2,...,vn}
identifier := [...]Type{v1,v2,...,vn}
identifier := [n]Type{k: vk}
identifier := [...]Type{k: vk}
数组的每个元素可以通过索引下标来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置。内置的 len
函数将返回数组中元素的个数。默认情况下,数组的每个元素都被初始化为元素类型对应的零值,对于数字类型来说就是 0。我们可以直接按顺序初始化数组,也可以通过键值对不按照顺序初始化。通过 ...
在简短声明是替代声明数组长度。
package main
import "fmt"
func main() {
var arr1 [3]int
fmt.Println("arr1:", arr1)
arr2 := [3]int{1, 2}
fmt.Println("arr2:", arr2)
arr3 := [3]int{1: 2}
fmt.Println("arr3:", arr3)
arr4 := [...]int{1, 2, 3}
fmt.Println("arr4:", arr4)
arr5 := [...]int{2: 1}
fmt.Println("arr5:", arr5)
arr5[0] = 3
arr5[1] = 2
for i, v := range arr4 {
fmt.Printf("index:%d, value:%d\n", i, v)
}
}
输出:
$ go run main.go
arr1: [0 0 0]
arr2: [1 2 0]
arr3: [0 2 0]
arr4: [1 2 3]
arr5: [0 0 1]
index: 0, value: 1
index: 1, value: 2
index: 2, value: 3