Appearance
第 8 章:复合数据类型
8.1 数组:定义、初始化、遍历
数组定义
go
// 定义一个长度为5的整型数组
var numbers [5]int
// 定义并初始化数组
var numbers = [5]int{1, 2, 3, 4, 5}
// 自动推断长度
numbers := [...]int{1, 2, 3, 4, 5}数组遍历
go
numbers := [5]int{1, 2, 3, 4, 5}
// 使用 for 循环遍历
for i := 0; i < len(numbers); i++ {
fmt.Println(numbers[i])
}
// 使用 for range 遍历
for index, value := range numbers {
fmt.Printf("索引: %d, 值: %d\n", index, value)
}8.2 切片 Slice(Go 最重要类型)
切片定义
go
// 从数组创建切片
numbers := [5]int{1, 2, 3, 4, 5}
slice := numbers[1:4] // 包含索引1,不包含索引4
// 使用 make 创建切片
slice := make([]int, 3, 5) // 长度为3,容量为5
// 直接创建切片
slice := []int{1, 2, 3, 4, 5}切片操作
go
// 添加元素
slice = append(slice, 6)
// 合并切片
slice1 := []int{1, 2, 3}
slice2 := []int{4, 5, 6}
slice3 := append(slice1, slice2...)
// 切片长度和容量
length := len(slice)
capacity := cap(slice)8.3 字典 Map:键值对存储、增删改查
Map 定义
go
// 使用 make 创建 map
m := make(map[string]int)
// 直接创建 map
m := map[string]int{
"a": 1,
"b": 2,
"c": 3,
}Map 操作
go
// 添加或修改元素
m["d"] = 4
// 获取元素
value, ok := m["a"]
if ok {
fmt.Println("值:", value)
}
// 删除元素
delete(m, "a")
// 遍历 map
for key, value := range m {
fmt.Printf("键: %s, 值: %d\n", key, value)
}8.4 结构体 struct:自定义类型基础
结构体定义
go
type Person struct {
Name string
Age int
City string
}结构体初始化
go
// 方式1:指定字段名
p1 := Person{
Name: "Alice",
Age: 25,
City: "Beijing",
}
// 方式2:按顺序初始化
p2 := Person{"Bob", 30, "Shanghai"}
// 方式3:使用 new
p3 := new(Person)
p3.Name = "Charlie"
p3.Age = 35
p3.City = "Guangzhou"结构体使用
go
fmt.Println(p1.Name, p1.Age, p1.City)