Go 泛型
Go 泛型通过类型参数让一组逻辑能在多种类型上复用,但它的目标是减少样板而不是把类型系统变成复杂元编程平台。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 高级运行时与抽象 MOC
- 前置概念: Go 接口
- 易混淆概念: Go 反射
Go 泛型
一句话定义
Go 泛型通过类型参数让函数和类型能在多种具体类型上复用同一套逻辑,同时保持比 interface{} 更强的静态类型信息。
核心机制 / 工作原理
泛型解决的核心问题是:
- 同一逻辑要支持多种类型
- 又不想为每种类型重复写一遍
- 也不想退化成丢失类型信息的通用容器
Go 对泛型的设计相对克制,重点在“减少样板”和“保持清晰”,而不是追求极度复杂的类型编程能力。
最小例子 / 最小场景
一个典型场景是写一个通用的工具函数,让它既能处理 int,也能处理 float64,而不必复制多份实现。
为什么这部分重要
当项目中出现大量“同构逻辑但类型不同”的代码时,泛型能明显降低重复。但如果用得太重,也可能把原本简单的 Go 代码变得抽象过头。
边界与易混淆点
- 泛型不是所有重复代码的默认答案
- 很多场景下,接口、多态和直接写具体类型,仍然更清晰
- 泛型和反射都能提高复用,但心智模型和代价完全不同