Go 语言提供了多种数据结构以满足不同的需求。本文将介绍数组、切片(Slice)和关联数组(Map),并提供简单的示例代码。
1. 数组
数组是固定长度的集合,元素类型相同。数组的长度是数组类型的一部分。
示例代码
package main
import "fmt"
func main() {
// 声明一个数组
var arr [5]int
// 初始化数组
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
// 输出数组
fmt.Println("数组:", arr)
// 声明并初始化数组
arr2 := [3]string{"apple", "banana", "cherry"}
fmt.Println("数组2:", arr2)
}
2. 切片(Slice)
切片是对数组的抽象,可以动态增长。切片不是固定长度的,使用起来更灵活。
示例代码
package main
import "fmt"
func main() {
// 声明切片
var slice []int
// 使用 make 创建切片
slice = make([]int, 0)
// 添加元素
slice = append(slice, 1)
slice = append(slice, 2, 3, 4, 5)
// 输出切片
fmt.Println("切片:", slice)
// 切片的切片
subSlice := slice[1:4] // 获取索引 1 到 3 的元素
fmt.Println("切片的切片:", subSlice)
}
3. 关联数组(Map)
Map 是一种无序的键值对集合,键是唯一的。它非常适合用来存储关联数据。
示例代码
package main
import "fmt"
func main() {
// 声明并初始化一个 Map
var m map[string]int
m = make(map[string]int)
// 添加元素
m["Alice"] = 25
m["Bob"] = 30
// 输出 Map
fmt.Println("关联数组:", m)
// 访问元素
age := m["Alice"]
fmt.Println("Alice 的年龄:", age)
// 检查键是否存在
if age, exists := m["Charlie"]; exists {
fmt.Println("Charlie 的年龄:", age)
} else {
fmt.Println("Charlie 不在 Map 中")
}
// 删除元素
delete(m, "Bob")
fmt.Println("删除 Bob 后的关联数组:", m)
}
4. 总结
- 数组:固定长度的元素集合,使用简单但不够灵活。
- 切片:动态长度的数组,能够根据需要扩展,使用更方便。
- 关联数组(Map):无序的键值对集合,适合存储关联数据,键唯一。