3.1 数组
本篇学习 Go 数组的定义、索引与遍历,并能完成定长数组的初始化、修改和读取。
数组
概念说明
数组(Array)是长度固定、元素类型相同的序列。
在 Go 中,数组长度也是类型的一部分,例如 [3]int 和 [4]int 是不同类型。
数组适合存放“数量固定、类型一致”的数据。
语法/规则
- 声明数组时必须确定长度,可以显式写长度,也可以使用
... 自动推导长度。 - 数组索引从
0 开始,最大索引是 len(array)-1。 - 数组元素可以通过索引读取和修改。
- 数组支持
for 和 for range 遍历。 - 未显式赋值的元素会使用对应类型的零值。
定义与索引修改示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package main
import "fmt"
func main() {
arr1 := [3]int{1, 2, 3}
arr2 := [3]int{1, 2, 3}
arr3 := [...]string{"Go", "数组", "入门"} // 用 ... 自动推导数组长度
arr1[0] = 10 // 通过索引修改元素
fmt.Println(arr1)
fmt.Println(arr2)
fmt.Println(arr3)
}
|
输出结果:
1
2
3
| [10 2 3]
[1 2 3]
[Go 数组 入门]
|
索引与遍历示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| package main
import "fmt"
func main() {
letters := [4]string{"a", "b", "c", "d"}
fmt.Println(letters[1]) // 第二个元素
fmt.Println(letters[len(letters)-2]) // 倒数第二个元素
for i, v := range letters { // i 是索引,v 是当前元素
fmt.Printf("index=%d value=%s\n", i, v)
}
}
|
输出结果:
1
2
3
4
5
6
| b
c
index=0 value=a
index=1 value=b
index=2 value=c
index=3 value=d
|
range 解析
在 for i, v := range letters 里,range 会按顺序遍历 letters。
i 表示当前元素的索引(从 0 开始)。v 表示当前索引对应的元素值。
这种写法比手动控制索引边界更直观,也更不容易写错。
常见错误
- 使用越界索引(例如
letters[4]),会触发 index out of range。 - 把不同长度的数组当作同一类型使用(如
[3]int 赋值给 [4]int)会编译失败。 - 误以为 Go 支持负索引(如
letters[-1]),Go 不支持这种写法。 - 把数组当切片使用
append,会编译报错,append 只作用于切片。