数组是 Go 语言编程中最常用的数据结构之一。顾名思义,数组就是指一组相同类型数据的集合。数组中包含的每个数据被称为数组元素(element),数组包含的元素个数被称为数组的长度。
定义数组类型时,数组长度必须是非负整型常量表达式,即在编译阶段就必须确定的值。长度是类型的组成部分,也就是说数组元素类型相同,但是长度不同的数组不属于同一类型。
var arr [3]int
如上代码定义了一个长度为 3 的,元素类型为整型的数组。同时 [3]int 作为一个类型。
package main
func main() {
var arr1 [3]int
var arr2 [3]int
var arr3 [5]int
arr1 = arr2
arr1 = arr3 // cannot use arr3 (type [5]int) as type [3]int in assignment
}
如上代码声明了三个数组,其中 arr1 和 arr2 都是 [3]int 是相同类型,可以相互赋值。 arr3 是 [5]int 与 [3]int 不属于同一种类型,不能相互赋值。所以程序编译时 arr1 = arr3 这句会报 “cannot use arr3 (type [5]int) as type [3]int in assignment”
数组可以使用 arr := [4]int{1, 2} 的方式进行初始化。arr 输出为 [1 2 0 0],是因为我们初始化的时候只给了前两位元素的初始值,剩余没有初始值的元素自动赋值为 0。如果元素类型是布尔类型的会自动赋值为 false;如果是字符串类型的自动赋值为空字符串。
也可以根据初始化数据的个数,自动确定数组长度。
package main
import "fmt"
func main() {
arr := []int{1, 3, 5, 9}
fmt.Println(len(arr)) // 4
}