第13讲 Go数组说明
本讲基于视频实际讲解内容整理
一、数组简介
老师开场提到,Go的数组类似于Java中的数组,是编程中常用的数据结构。
数组的定义方式:
Go
// 定义一个长度为3的int数组
var a [3]int
二、数组声明与初始化
2.1 声明指定长度的数组
Go
package main
import "fmt"
func main() {
// 声明一个长度为10的int数组
var a [10]int
// 不赋值时,所有元素默认为零值(0)
fmt.Println(a) // [0 0 0 0 0 0 0 0 0 0]
// 通过下标赋值
a[0] = 1
fmt.Println(a) // [1 0 0 0 0 0 0 0 0 0]
}
要点:数组声明时如果不初始化,所有元素会被自动初始化为元素类型对应的零值。对于数字类型来说,零值就是
0。
2.2 声明时直接初始化
Go
package main
import "fmt"
func main() {
// 方式一:指定长度并初始化
var b [3]int = [3]int{1, 2, 3}
fmt.Println(b) // [1 2 3]
// 方式二:自动推导长度(使用 ... 省略号)
c := [...]int{9, 7, 1}
fmt.Println(c) // [9 7 1]
// 方式三:短变量声明
d := [3]int{100, 200, 300}
fmt.Println(d)
}
三、数组的核心特性
3.1 下标访问
- 数组的每个元素通过下标来访问
- 下标从 0 开始,到
数组长度 - 1结束 - 可以通过下标读取和修改元素
Go
a[0] = 100 // 修改
fmt.Println(a[0]) // 读取
3.2 len() 函数
Go内置的 len() 函数可以返回数组的元素个数:
Go
arr := [5]int{1, 2, 3, 4, 5}
fmt.Println(len(arr)) // 5
3.3 默认零值初始化
数组的每个元素在声明时会被自动初始化为元素类型对应的零值:
| 元素类型 | 零值 |
|---|---|
| int/float | 0 |
| bool | false |
| string | "" (空字符串) |
| 指针 | nil |
3.4 省略号(...)自动推导长度
当声明数组时不确定长度,可以使用 ... 让编译器根据初始化值的个数自动推导:
Go
// 编译器自动推导长度为4
arr := [...]int{10, 20, 30, 40}
fmt.Println(len(arr)) // 4
重要限制:
...只能用在数组的推导上面,不能用在切片上。老师在视频中特别强调了这个区别。
四、数组与切片的区别
老师在视频中也提到了切片(slice),但说明"切片先不管,后面再说"。关键区别:
| 特性 | 数组 | 切片 |
|---|---|---|
| 长度 | 固定 | 可变 |
| 声明 | [3]int |
[]int |
... 推导 |
✅ 支持 | ❌ 不支持 |
五、完整代码示例
Go
package main
import "fmt"
func main() {
// 1. 声明数组,默认零值
var a [10]int
fmt.Println("默认零值:", a)
// 2. 通过下标赋值
a[0] = 100
a[1] = 200
fmt.Println("赋值后:", a)
// 3. 声明并初始化
b := [3]int{1, 2, 3}
fmt.Println("初始化:", b)
// 4. 自动推导长度
c := [...]int{9, 7, 1, 5}
fmt.Println("自动推导:", c)
fmt.Println("长度:", len(c))
// 5. 通过下标修改
c[0] = 100
fmt.Println("修改后:", c)
// 6. 通过下标读取
fmt.Println("c[0]:", c[0])
fmt.Println("c[1]:", c[1])
}
六、本讲小结
| 知识点 | 要点 |
|---|---|
| 数组声明 | var a [N]类型 或 a := [N]类型{...} |
| 零值初始化 | 声明后所有元素自动初始化为类型零值 |
| 下标访问 | 从0开始,到 len-1 结束 |
| len() | 返回数组元素个数 |
| ... 推导 | [...]类型{值...} 自动推导长度,仅限数组 |
| 数组 vs 切片 | 数组长度固定,切片长度可变 |
七、课后练习
- 声明一个长度为5的
int数组,不初始化,打印观察零值 - 声明一个
string数组,包含3个名字,用...推导长度 - 声明一个
float64数组,通过下标修改第2个元素的值 - 使用
len()函数获取数组长度并打印 - 尝试访问超出数组长度的下标(如长度为3的数组访问
a[5]),观察报错信息