Skip to content

第 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)

© 2026 编程马·菜鸟教程 版权所有