06 数组
2025/9/24大约 2 分钟
06 数组
在 Golang 中数组是一个长度固定的数据类型,数组的长度也是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型,数组的长度在定义后就是固定的了。
与其对应的类型是 Slice(切片),Slice 是可以增长和收缩的动态序列,功能也更灵活,但是想要理解 slice 工作原理的话需要先理解数组,所以本节主要为大家讲解数组的使用。
基本定义
首先看一下基本语法:
var 数组变量名 [元素数量]T
Go 的数组采用的也是 0 索引机制,要注意使用时不能越界,否则就会触发 panic 错误,且 Go 的数组是纯值类型,比如一个函数参数是一个数组,调用这个函数时并不会像 c 一样退化成数组指针操作同一块地址,而是会拷贝一份,操作拷贝的版本。
初始化
与 cpp 相同,可以使用初始化列表的方式对数组进行初始化:
var testArray = [3]int32{1, 2, 9}
当然每次都手动指定长度不是很友好,Go 语言也提供了一种策略可以用于自动计算长度,但是注意他只是帮我们计算了长度,还是不能改动大小的:
var numArray = [...]int32{1, 2, 3}
也可以指定具体索引的值,其余的都被默认初始化:
var stringArray = [...]string{1: "aaa", 5: "bbb"}
遍历
打印的话也很简单,前面几节其实都写过了类似的,有如下两种方法:
// for 遍历
for i := 0; i < len(numArray); i++ {
print(numArray[i])
}
// range 遍历
for _, v := range numArray {
print(v, " ")
}
多维数组
也是非常的简单,语法如下:
var variable_name [SIZE1][SIZE2]...[SIZEN]variable_type
我们此处以一个简单的二维数组为例来介绍一下,整体来说还是很简单的:
var a = [...][2]string{
{"北京", "上海"},
{"广州", "深圳"},
{"成都", "重庆"},
}
for _, v := range a {
for _, city := range v {
print(city, " ")
}
println()
}
注意: 不管有多少维,都只有第一个维度可以使用 ... 来让编译器推断长度。