声明和初始化

数组是一个由固定长度的相同特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组长度必须是一个常量表达式,并且必须是一个非负整数。数组长度也是数组类型的一部分,所以 [5]int[10]int 是属于不同类型的。因为数组的长度是固定的,因此在Go语言中很少直接使用数组。和数组对应的类型是 Slice(切片),它是可以增长和收缩动态序列,slice功能也更灵活,但是要理解slice工作原理的话需要先理解数组。

数组相关声明及初始化语法:

  1. var identifier [len]Type
  2. identifier := [n]Type{v1,v2,...,vn}
  3. identifier := [...]Type{v1,v2,...,vn}
  4. identifier := [n]Type{k: vk}
  5. identifier := [...]Type{k: vk}

数组的每个元素可以通过索引下标来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置。内置的 len 函数将返回数组中元素的个数。默认情况下,数组的每个元素都被初始化为元素类型对应的零值,对于数字类型来说就是 0。我们可以直接按顺序初始化数组,也可以通过键值对不按照顺序初始化。通过 ... 在简短声明是替代声明数组长度。

  1. package main
  2. import "fmt"
  3. func main() {
  4. var arr1 [3]int
  5. fmt.Println("arr1:", arr1)
  6. arr2 := [3]int{1, 2}
  7. fmt.Println("arr2:", arr2)
  8. arr3 := [3]int{1: 2}
  9. fmt.Println("arr3:", arr3)
  10. arr4 := [...]int{1, 2, 3}
  11. fmt.Println("arr4:", arr4)
  12. arr5 := [...]int{2: 1}
  13. fmt.Println("arr5:", arr5)
  14. arr5[0] = 3
  15. arr5[1] = 2
  16. for i, v := range arr4 {
  17. fmt.Printf("index:%d, value:%d\n", i, v)
  18. }
  19. }

输出:

  1. $ go run main.go
  2. arr1: [0 0 0]
  3. arr2: [1 2 0]
  4. arr3: [0 2 0]
  5. arr4: [1 2 3]
  6. arr5: [0 0 1]
  7. index: 0, value: 1
  8. index: 1, value: 2
  9. index: 2, value: 3