From 54415d45ba16286141a96a2cc03430fd0464549e Mon Sep 17 00:00:00 2001 From: yumaojun03 <719118794@qq.com> Date: Sun, 11 Jan 2026 13:56:26 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(day02):=20=E6=B7=BB=E5=8A=A0Go?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=95=99=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增map和slice详细教程,完善array和struct内容 - 新增map章节,详细介绍Go中map的概念、创建、操作和底层原理 - 新增slice章节,涵盖切片的创建、操作、引用特性和实际应用 - 完善array章节,添加数组作为函数参数、多维数组等内容 - 更新struct章节,修正标题错误并补充结构体定义说明 - 为各章节添加实践作业题目,增强学习效果 ``` --- day02/array/README.md | 31 +++++- day02/map/README.md | 236 ++++++++++++++++++++++++++++++++++++++++ day02/slice/README.md | 205 ++++++++++++++++++++++++++++++++++ day02/slice/image-1.png | Bin 0 -> 17545 bytes day02/slice/image.png | Bin 0 -> 46430 bytes day02/struct/README.md | 15 ++- day02/struct/image.png | Bin 0 -> 15359 bytes 7 files changed, 484 insertions(+), 3 deletions(-) create mode 100644 day02/map/README.md create mode 100644 day02/slice/README.md create mode 100644 day02/slice/image-1.png create mode 100644 day02/slice/image.png create mode 100644 day02/struct/image.png diff --git a/day02/array/README.md b/day02/array/README.md index 34aa0dd..5a41580 100644 --- a/day02/array/README.md +++ b/day02/array/README.md @@ -90,4 +90,33 @@ func main() { 1. 循环遍历(for) ```go -``` \ No newline at end of file +``` + + +## 数组作为函数参数 + + +## 多维数组 + + +## 作业 + +请同学们完成以下数组练习题,以巩固对Go语言数组的理解: + +1. **定义和初始化数组** + 定义一个包含5个整数的数组,初始化为1到5,并打印数组内容。 + +2. **数组遍历** + 使用for循环遍历一个字符串数组,打印每个元素的索引和值。 + +3. **数组拷贝** + 创建一个数组,拷贝到另一个数组,修改原数组的第一个元素,观察拷贝后的数组是否改变。 + +4. **多维数组** + 定义一个3x3的整数二维数组,初始化为九宫格形式(1到9),并打印出来。 + +5. **数组作为函数参数** + 编写一个函数,接受一个整数数组作为参数,计算并返回数组中所有元素的和。 + +请将代码写在 `main.go` 文件中,并运行测试。 + diff --git a/day02/map/README.md b/day02/map/README.md new file mode 100644 index 0000000..1568777 --- /dev/null +++ b/day02/map/README.md @@ -0,0 +1,236 @@ +# Map + +Go中的map是一种无序的键值对集合,底层基于哈希表实现。每个键必须是可比较的类型,值可以是任意类型。map提供快速的查找、插入和删除操作。 + +## 核心概念 + +map的底层实现是哈希表,通过键的哈希值快速定位值。键必须是可哈希的类型(如int、string、指针等),值可以是任意类型。map是引用类型,赋值时共享底层数据。 + +```go +// map的零值是nil,不能直接使用 +var m map[string]int // m == nil +``` + +## 创建和初始化 + +**原理**:使用make创建map,指定初始容量可以提高性能。也可以使用字面量初始化。 + +```go +// 使用make创建 +m1 := make(map[string]int) // 空map +m2 := make(map[string]int, 10) // 指定初始容量 + +// 字面量初始化 +m3 := map[string]int{ + "apple": 5, + "banana": 3, +} +fmt.Println(m3) // map[apple:5 banana:3] +``` + +## 访问元素 + +**原理**:通过键访问值,如果键不存在,返回零值。可以使用第二个返回值检查键是否存在。 + +```go +m := map[string]int{"a": 1, "b": 2} + +value := m["a"] // 1 +fmt.Println(value) + +// 检查键是否存在 +if val, exists := m["c"]; exists { + fmt.Println("存在:", val) +} else { + fmt.Println("不存在") +} +``` + +## 修改和添加元素 + +**原理**:直接赋值键即可添加或修改。如果键存在则修改,不存在则添加。 + +```go +m := make(map[string]int) + +m["key1"] = 10 // 添加 +m["key1"] = 20 // 修改 +fmt.Println(m) // map[key1:20] +``` + +## 删除元素 + +**原理**:使用delete函数删除键值对。如果键不存在,delete不报错。 + +```go +m := map[string]int{"a": 1, "b": 2, "c": 3} + +delete(m, "b") // 删除键"b" +fmt.Println(m) // map[a:1 c:3] + +delete(m, "d") // 删除不存在的键,无错误 +``` + +## 遍历map + +**原理**:使用range遍历键值对。遍历顺序是随机的,不能依赖顺序。 + +```go +m := map[string]int{"a": 1, "b": 2, "c": 3} + +for key, value := range m { + fmt.Printf("key: %s, value: %d\n", key, value) +} + +// 只遍历键 +for key := range m { + fmt.Println(key) +} +``` + +## map是引用类型 + +**原理**:map是引用类型,赋值时共享底层数据。修改一个会影响另一个。 + +```go +m1 := map[string]int{"a": 1} +m2 := m1 // 共享底层数据 + +m2["b"] = 2 +fmt.Println(m1) // map[a:1 b:2] m1也被修改 +fmt.Println(m2) // map[a:1 b:2] +``` + +## map作为函数参数 + +**原理**:map作为参数传递时,是引用传递,函数内修改会影响调用者。 + +```go +func addEntry(m map[string]int, key string, value int) { + m[key] = value +} + +func main() { + m := make(map[string]int) + addEntry(m, "new", 42) + fmt.Println(m) // map[new:42] +} +``` + +## 扩展 Map的底层原理 + +从Go 1.23开始,map的底层实现从传统的哈希表改为基于Swiss table的高性能实现,大幅提升了性能和内存效率。以下详细讲解其工作原理。 + +### 1. Swiss Table结构 + +Swiss table是一种现代的开放寻址哈希表设计,具有以下特点: +- 每个桶包含一个控制字节数组和数据数组 +- 控制字节存储元数据(哈希值的高位、删除标记等) +- 数据与控制字节分离,减少缓存未命中 + +``` +Swiss Table结构示意图: ++-------------------+ +-------------------+ +| 控制字节 (8字节) | | 数据槽位 (8个) | +| [H1|H2|H3|H4|...]| | [k1,v1] [k2,v2]...| ++-------------------+ +-------------------+ +| 桶0: 控制元数据 | --> | 桶0: 键值对数据 | ++-------------------+ +-------------------+ +| 桶1: 控制元数据 | --> | 桶1: 键值对数据 | ++-------------------+ +-------------------+ +``` + +### 2. 哈希计算和定位 + +**改进的哈希计算**: +- 使用更快的哈希函数(AesHash或类似) +- 哈希值分为高位和低位 +- 高位用于SIMD比较,低位用于定位 + +``` +哈希计算过程: +Key -> hash(key) -> [高7位: SIMD比较] [低位: 位置索引] +``` + +### 3. 插入和查找过程 + +**查找优化**: +1. 计算哈希值 +2. 使用SIMD指令并行比较控制字节 +3. 快速定位匹配的槽位 + +**插入优化**: +1. 查找空闲槽位 +2. 使用线性探测或二次探测 +3. 写入控制字节和数据 + +``` +查找示意图(使用SIMD): +Hash(Key) = 0xABCD1234 +控制字节 = 0xAB (高位) +位置索引 = 0x1234 & 掩码 + +控制字节数组: [AB|CD|EF|00|...] + ↑ SIMD比较找到匹配 +数据数组: [k1,v1] [k2,v2] [k3,v3] ... +``` + +### 4. 扩容机制 + +**渐进式扩容**: +- 当负载因子超过阈值时触发扩容 +- 新表大小为2的幂次 +- 每次操作迁移少量数据 +- 支持就地扩容(in-place rehashing) + +``` +扩容过程: +旧表: 控制字节 [A|B|C|D] --> 数据 [k1,v1] [k2,v2] [k3,v3] [k4,v4] + +新表: 控制字节 [A|0|B|0|C|0|D|0] --> 数据 [k1,v1] [k2,v2] [k3,v3] [k4,v4] + (插入空字节分隔) +``` + +### 5. 性能优势 + +**相比传统哈希表**: +- **更快的查找**:SIMD并行比较,减少分支预测失败 +- **更好的缓存利用**:控制字节和数据分离 +- **更低的内存开销**:更紧凑的布局 +- **抗哈希冲突**:更好的分布减少最坏情况 + +``` +性能对比: +操作 | 传统哈希表 | Swiss Table +查找 | O(1) avg | O(1) faster +插入 | O(1) avg | O(1) faster +内存使用 | ~32字节/对 | ~24字节/对 +``` + +## 总结 + +map是Go中常用的数据结构,适合需要快速查找的场景。记住map是无序的,键必须可哈希,操作是引用传递的。 + +## 作业 + +请同学们完成以下map练习题,以巩固对Go语言map的理解: + +1. **创建和初始化map** + 创建一个map,键为string,值为int,初始化包含3个键值对,并打印map。 + +2. **访问元素** + 给定map,检查某个键是否存在,如果存在打印值,否则打印"不存在"。 + +3. **修改和添加** + 从空map开始,添加5个键值对,然后修改其中一个值。 + +4. **删除元素** + 删除map中的一个元素,并打印删除前后的map。 + +5. **遍历map** + 遍历map,计算所有值的和。 + +6. **函数参数** + 编写一个函数,接受map作为参数,添加一个新键值对。 + +请将代码写在 `main.go` 文件中,并运行测试。 \ No newline at end of file diff --git a/day02/slice/README.md b/day02/slice/README.md new file mode 100644 index 0000000..7662aa0 --- /dev/null +++ b/day02/slice/README.md @@ -0,0 +1,205 @@ +# 切片 + +![alt text](image.png) + +Go中的slice依赖于数组,它的底层就是数组,所以数组具有的优点, slice都有。 且slice支持可以通过append向slice中追加元素,长度不够时会动态扩展,通过再次slice切片,可以得到得到更小的slice结构,可以迭代、遍历等 + +// runtime/slice.go +type slice struct { + array unsafe.Pointer // 数组指针 + len int // 长度 + cap int // 容量 +} +每一个slice结构都由3部分组成: + ++ 容量(capacity): 即底层数组的长度,表示这个slice目前最多能扩展到这么长 ++ 长度(length):表示slice当前的长度,即当前容纳的元素个数 ++ 数组指针(array): 指向底层数组的指针 + +比如创建一个长度为3,容量为5,int类型的切片 +```go +s := make([]int, 3, 4) +fmt.Println(a, len(s), cap(s)) // [0 0 0] 3 5 +``` + +![alt text](image-1.png) + + +## 创建和初始化 + +**原理**:切片是动态数组,底层基于固定大小的数组,可以根据需要动态扩容。创建时可以指定长度和容量。 + +```go +// 使用 make 创建切片:make([]类型, 长度, 容量) +s1 := make([]int, 3, 5) // 长度3,容量5 +fmt.Println(s1, len(s1), cap(s1)) // [0 0 0] 3 5 + +// 直接初始化 +s2 := []int{1, 2, 3} // 长度和容量都是3 +fmt.Println(s2, len(s2), cap(s2)) // [1 2 3] 3 3 + +// 从数组创建切片 +arr := [5]int{1, 2, 3, 4, 5} +s3 := arr[1:4] // 从索引1到3(不包括4) +fmt.Println(s3, len(s3), cap(s3)) // [2 3 4] 3 4 +``` + +## 切片访问 + +**原理**:切片通过索引访问元素,索引从0开始。与数组类似,但更灵活。 + +```go +s := []int{10, 20, 30, 40, 50} + +// 通过索引访问元素 +fmt.Println(s[0]) // 10 +fmt.Println(s[2]) // 30 + +// 修改元素 +s[1] = 25 +fmt.Println(s) // [10 25 30 40 50] +``` + +## nil和空切片 + +**原理**:nil切片表示未初始化的切片,长度和容量都为0。空切片是已初始化的切片但不包含元素。两者在行为上略有不同。 + +```go +// nil 切片:未初始化的切片 +var s1 []int +fmt.Println(s1 == nil) // true +fmt.Println(len(s1), cap(s1)) // 0 0 + +// 空切片:已初始化的空切片 +s2 := []int{} +s3 := make([]int, 0) +fmt.Println(len(s2), cap(s2)) // 0 0 +fmt.Println(len(s3), cap(s3)) // 0 0 +``` + +## 往切片中添加元素 + +**原理**:使用append函数添加元素。如果容量不足,会自动扩容底层数组,通常容量翻倍增长。 + +```go +s := []int{1, 2} +fmt.Println(s, len(s), cap(s)) // [1 2] 2 2 + +// 使用 append 添加元素 +s = append(s, 3) +fmt.Println(s, len(s), cap(s)) // [1 2 3] 3 4 (容量自动扩容) + +// 添加多个元素 +s = append(s, 4, 5) +fmt.Println(s) // [1 2 3 4 5] +``` + +## 通过切片创建新的切片 + +**原理**:切片操作创建新的切片视图,共享底层数组。新切片的长度是high-low,容量是原容量减去low。 + +```go +s := []int{0, 1, 2, 3, 4, 5} + +// 创建子切片:s[low:high] (不包括high) +sub1 := s[1:4] // [1, 2, 3] +fmt.Println(sub1) + +// 省略索引 +sub2 := s[:3] // [0, 1, 2] +sub3 := s[2:] // [2, 3, 4, 5] +sub4 := s[:] // [0, 1, 2, 3, 4, 5] 复制整个切片 +``` + +## 遍历切片 + +**原理**:可以使用传统for循环或range关键字遍历。range返回索引和值,更简洁。 + +```go +s := []string{"apple", "banana", "cherry"} + +// 方法1:使用索引 +for i := 0; i < len(s); i++ { + fmt.Println(i, s[i]) +} + +// 方法2:使用 range(推荐) +for index, value := range s { + fmt.Println(index, value) +} +``` + +## slice是引用类型 + +**原理**:切片是引用类型,赋值时复制切片头,但共享底层数组。修改一个会影响另一个。 + +```go +s1 := []int{1, 2, 3} +s2 := s1 // s2 指向同一个底层数组 + +s2[0] = 99 +fmt.Println(s1) // [99 2 3] s1 也被修改了 +fmt.Println(s2) // [99 2 3] +``` + +## 切片拷贝 + +**原理**:使用copy函数进行深拷贝,创建独立的数据副本。修改拷贝后的切片不会影响原切片。 + +```go +s1 := []int{1, 2, 3} +s2 := make([]int, len(s1)) +copy(s2, s1) // 拷贝元素到 s2 + +s2[0] = 99 +fmt.Println(s1) // [1 2 3] s1 不变 +fmt.Println(s2) // [99 2 3] +``` + +## 切片作为函数参数 + +**原理**:切片作为参数传递时,是引用传递,函数内修改会影响调用者。高效但需注意副作用。 + +```go +func sum(nums []int) int { + total := 0 + for _, num := range nums { + total += num + } + return total +} + +func main() { + s := []int{1, 2, 3, 4, 5} + result := sum(s) + fmt.Println(result) // 15 +} +``` + +## 总结 +切片是 Golang 中比较有特色的一种数据类型,既为我们操作集合类型的数据提供了便利的方式,是又能够高效的在函数间进行传递,因此在代码中切片类型被使用的相当广泛 + + +## 作业 + +请同学们完成以下切片练习题,以巩固对Go语言切片的理解: + +1. **创建和初始化切片** + 创建一个字符串切片,包含"Go", "Python", "Java",并打印长度和容量。 + +2. **切片操作** + 给定切片[]int{1,2,3,4,5},创建子切片包含第2到第4个元素(不包括第4个),并打印结果。 + +3. **添加元素** + 从空切片开始,使用append添加5个整数,观察长度和容量的变化。 + +4. **遍历切片** + 遍历一个整数切片,计算所有元素的和。 + +5. **切片拷贝** + 创建一个切片,拷贝到另一个切片,修改原切片,验证拷贝是否独立。 + +6. **函数参数** + 编写一个函数,接受字符串切片作为参数,将所有字符串转换为大写并返回新切片。 + +请将代码写在 `main.go` 文件中,并运行测试。 diff --git a/day02/slice/image-1.png b/day02/slice/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..501f17dd638ce3f7015c6fa4f540f41bb83e9fff GIT binary patch literal 17545 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 E4;FI_5dZ)H literal 0 HcmV?d00001 diff --git a/day02/slice/image.png b/day02/slice/image.png new file mode 100644 index 0000000000000000000000000000000000000000..1a899c203c7a82d365400cfa081129008ccbe5e0 GIT binary patch literal 46430 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 literal 0 HcmV?d00001 diff --git a/day02/struct/README.md b/day02/struct/README.md index 9c0aadd..259f1e9 100644 --- a/day02/struct/README.md +++ b/day02/struct/README.md @@ -1,7 +1,18 @@ # 结构体 +![alt text](image.png) -## 子针数组(重要: 95%) +我们前面介绍的数组 只能保存同一种类型的数据, 当我们需要记录多种不同类型的数据时,我们该怎么办? + +结构体就是用于解决这个问题的, 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合, 方便容量我们的任意类型的数据 + + +## 结构体的定义 + + + + +## 指针数组(重要: 95%) 指针数组: 创建一个数组,里面存放指针,指针指向数组的某一个元素 @@ -16,5 +27,5 @@ type Person struct {} ``` -## 子针数组的copy +## 指针数组的拷贝 diff --git a/day02/struct/image.png b/day02/struct/image.png new file mode 100644 index 0000000000000000000000000000000000000000..1aee4a01fea7ad41fad0df96728b4da8ea2500c3 GIT binary patch literal 15359 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