Go语言数组定义
数组是具有相同类型的⼀组⻓度固定的数据序列,这种类型可以是任意的基本数据类型或复合数据类型及⾃定义类Go内置容器——数组和切⽚型。
相对于去声明 number0, number1, ..., number99 的变量,使用数组形式 numbers[0], numbers[1] ..., numbers[99] 更加方便且易于扩展。
数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。
注意数组的长度必须是常量,且长度属于数组类型的一部分,定义之后不允许修改长度。
数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1。
声明数组
Go 语言数组声明需要指定元素类型及元素个数
var arrayName [size]dataType
其中,arrayName 是数组的名称,size是数组的大小,dataType是数组中元素的数据类型。
以下定义了数组 balance 长度为 10 类型为 float32:
var balance [10]float32
var 变量名 [数组⻓度] 数据类型 以上为⼀维数组的定义⽅式 数组⻓度必须是整数且⼤于 0 未初始化的数组不是nil,也就是说没有空数组(与切⽚不同)
初始化数组
以下演示了数组初始化:
以下实例声明一个名为 numbers 的整数数组,其大小为 5,在声明时,数组中的每个元素都会根据其数据类型进行默认初始化,对于整数类型,初始值为 0。
var numbers [5]int
还可以使用初始化列表来初始化数组的元素:
var numbers = [5]int{1, 2, 3, 4, 5}
以上代码声明一个大小为 5 的整数数组,并将其中的元素分别初始化为 1、2、3、4 和 5。
另外,还可以使用 := 简短声明语法来声明和初始化数组:
numbers := [5]int{1, 2, 3, 4, 5}
注意::=符号只允许在函数中使用,即只能在声明局部变量的时候使用,而var没有这个限制。
以上代码创建一个名为 numbers 的整数数组,并将其大小设置为 5,并初始化元素的值。
注意:在 Go 语言中,数组的大小是类型的一部分,因此不同大小的数组是不兼容的,也就是说 [5]int 和 [10]int 是不同的类型。
以下定义了数组 balance 长度为 5 类型为 float32,并初始化数组的元素:
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
也可以通过字面量在声明数组的同时快速初始化数组:
balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
如果设置了数组的长度,我们还可以通过指定下标来初始化元素:
// 将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}
初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:
balance[4] = 50.0
以上实例读取了第五个元素。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。
访问数组元素
数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:
var salary float32 = balance[9]
遍历数组
遍历数组是指依次访问数组中的每个元素。Go语言中有两种常用的遍历数组的方法:使用for循环和使用range关键字。
使用for循环
使用for循环遍历数组的方法是利用索引来访问每个元素。例如,下面的代码遍历了数组balance中的所有元素,并打印出来:
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
for i := 0; i < len(balance); i++ {
fmt.Println(balance[i])
}
输出结果为:
1000
2
3.4
7
50
使用range关键字
使用range关键字遍历数组的方法是利用for...range循环来迭代每个元素。例如,下面的代码遍历了数组balance中的所有元素,并打印出来:
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
for index, value := range balance {
fmt.Println(index, value)
}
输出结果为:
0 1000
1 2
2 3.4
3 7
4 50
其中,index和value是可以自定义的变量名,也可以用空白标识符(下划线)来忽略不需要的值