07-generics
泛型(Generics)是 Go 1.18 引入的革命性特性。Go 的泛型设计追求简洁与实用,不引入庞大的类型系统,而是为日常开发中最常见的代码复用问题提供类型安全的解决方案。
学习目标
- 理解为什么需要泛型,以及泛型解决什么问题
- 掌握类型参数、类型约束、类型集合的核心概念
- 能够使用泛型实现通用的数据结构和算法
- 熟练运用标准库的泛型包(slices、maps、cmp)
- 理解泛型与接口的选择原则
- 避免泛型使用中的常见陷阱
章节
| 编号 | 章节 | 文件 | 内容 |
|---|---|---|---|
| 2.1 | 泛型入门 | 01-泛型入门 | 为什么需要泛型、类型参数、基础语法 |
| 2.2 | 类型约束 | 02-类型约束 | 类型集、~、comparable、约束设计 |
| 2.3 | 泛型数据结构 | 03-泛型数据结构 | Stack、Queue、LinkedList、Set、LRU Cache |
| 2.4 | 泛型算法 | 04-泛型算法 | Filter、Map、Reduce、GroupBy、Sort |
| 2.5 | 标准库泛型 | 05-标准库泛型 | slices、maps、cmp 包深度解析 |
| 2.6 | 实战与最佳实践 | 06-实战与最佳实践 | 决策树、缓存层、验证框架、性能 |
学习路径
2.1 泛型入门 — 了解泛型解决的问题,会写泛型函数
↓
2.2 类型约束 — 深入掌握约束,理解 ~ 和 comparable
↓
2.3 泛型数据结构 — 动手实现常见数据结构
↓
2.4 泛型算法 — 掌握函数式编程模式
↓
2.5 标准库泛型 — 学会用标准库,不重复造轮子
↓
2.6 实战与最佳实践 — 知道什么时候用、什么时候不用前置知识
- 掌握 Go 基础语法(变量、函数、类型)
- 理解接口(interface)的概念和用法
- 了解 Go 的数据结构(切片、Map)
学习时间
约 1 周(每天 2-3 小时)
检查清单
- [ ] 能够编写泛型函数,理解类型推断规则
- [ ] 掌握
~T、comparable、cmp.Ordered的使用场景 - [ ] 至少实现 3 种泛型数据结构(Stack、Set、Cache)
- [ ] 理解 Filter/Map/Reduce 模式和在 Go 中的写法
- [ ] 熟练使用 slices.SortFunc 进行自定义排序
- [ ] 掌握 cmp.Compare 用于多字段比较
- [ ] 理解泛型和接口的选择原则(决策树)
- [ ] 知道泛型的常见陷阱(类型推断失败、nil 处理)