在 Go 语言中,数组是一个固定长度的元素集合,所有元素都必须是相同的数据类型。与其他编程语言不同,Go 中的数组长度是数组类型的一部分,因此数组的长度是数组的一个特性,不可更改。
数组在 Go 中是一种基础的数据结构,适用于需要存储固定大小集合的情况。
📖 目录
1. 数组定义
在 Go 语言中,数组的定义方式包括指定长度和元素类型。数组的长度是数组类型的一部分。
1.1 基本语法
var 数组名 [长度] 类型
长度
是数组的大小。类型
是数组中元素的类型。
示例:
package main
import "fmt"
func main() {
var arr [5]int // 定义一个长度为 5 的整数数组
fmt.Println(arr)
}
输出:
[0 0 0 0 0]
在这个示例中,数组 arr
被定义为包含 5 个整数的数组,默认值为 0。
2. 数组初始化
Go 语言允许在声明数组时直接初始化其值。
2.1 声明并初始化
var arr = [3]int{1, 2, 3}
2.2 使用 :=
初始化
arr := [3]int{1, 2, 3}
2.3 使用省略号自动推断长度
arr := [...]int{1, 2, 3} // Go 会自动推断数组的长度为 3
3. 数组访问
数组的元素可以通过索引访问,索引从 0 开始。
示例:
package main
import "fmt"
func main() {
arr := [3]int{10, 20, 30}
fmt.Println(arr[0]) // 访问第一个元素,输出: 10
fmt.Println(arr[1]) // 访问第二个元素,输出: 20
fmt.Println(arr[2]) // 访问第三个元素,输出: 30
}
4. 数组长度
Go 数组的长度在定义时确定,并且是类型的一部分。可以使用 len()
函数获取数组的长度。
示例:
package main
import "fmt"
func main() {
arr := [4]int{1, 2, 3, 4}
fmt.Println(len(arr)) // 输出: 4
}
5. 多维数组
Go 语言支持多维数组。多维数组是数组的数组,常见的有二维数组。多维数组的定义方式如下:
示例:
package main
import "fmt"
func main() {
var arr [2][3]int // 定义一个 2x3 的二维数组
arr[0][0] = 1
arr[0][1] = 2
arr[0][2] = 3
arr[1][0] = 4
arr[1][1] = 5
arr[1][2] = 6
fmt.Println(arr)
}
输出:
[[1 2 3] [4 5 6]]
6. 数组的遍历
可以使用 for
循环遍历数组中的所有元素。Go 语言提供了简便的方式遍历数组的元素。
6.1 基本遍历
package main
import "fmt"
func main() {
arr := [4]int{1, 2, 3, 4}
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}
}
6.2 使用 range
遍历数组
range
提供了更简洁的方式来遍历数组,并返回每个元素的索引和值。
package main
import "fmt"
func main() {
arr := [4]int{1, 2, 3, 4}
for index, value := range arr {
fmt.Println("Index:", index, "Value:", value)
}
}
输出:
Index: 0 Value: 1
Index: 1 Value: 2
Index: 2 Value: 3
Index: 3 Value: 4
7. 数组的复制
在 Go 中,数组是值类型,因此当你将一个数组赋值给另一个数组时,实际上是进行了一次数组的复制。
示例:
package main
import "fmt"
func main() {
arr1 := [3]int{1, 2, 3}
arr2 := arr1 // 数组赋值会创建副本
arr2[0] = 10
fmt.Println("arr1:", arr1) // 输出: [1 2 3]
fmt.Println("arr2:", arr2) // 输出: [10 2 3]
}
8. 数组与切片
数组的大小是固定的,因此不够灵活。Go 提供了切片(slice)来弥补这一缺点,切片是数组的一个动态视图。切片允许动态增加或减少元素,而不必担心数组的固定大小。
示例:
package main
import "fmt"
func main() {
arr := [3]int{1, 2, 3} // 定义一个数组
slice := arr[:] // 将数组转化为切片
fmt.Println(slice) // 输出: [1 2 3]
slice[0] = 10
fmt.Println(slice) // 输出: [10 2 3]
fmt.Println(arr) // 输出: [1 2 3]
}
在上述示例中,切片是数组的一个视图,对切片的修改不会影响原数组(因为数组和切片是不同的类型)。
9. 参考资料
Go 语言的数组是一个简单但功能强大的数据结构,适用于存储固定大小的数据集合。理解数组的使用方式、遍历和与切片的关系对高效使用 Go 语言至关重要。
发表回复