generics
泛型(Generics)¶
| 优势 | 说明 |
|---|---|
| 代码复用 | 一套逻辑适配多种类型,减少重复 |
| 类型安全 | 编译期检查,杜绝运行时类型错误 |
| 性能提升 | 避免 interface{} 装箱,减少内存分配 |
| 标准库增强 | slices, maps, cmp 等提供强大工具 |
| 可读性提升 | 函数签名明确表达类型关系 |
为什么 Go 不支持泛型方法(可以在结构体使用泛型或函数使用泛型来代替)
- 如果 Go 允许方法级别的泛型,那么在编译时,编译器必须知道所有调用该方法的地方,才能生成对应的代码。(降低编译速度)
- 降低运行时速度
- 增加语言复杂度
如何约束泛型?¶
通过 定义接口(interface) 来约束泛型。
- 约束字段类型
- 约束必须实现接口方法
泛型和any/interface{}如何取舍?¶
- 仅需存储多类型值且无类型相关操作的场景,建议使用any
- 涉及装箱(Boxing)和类型断言时建议使用泛型。(基本类型存入 any 时会转换为堆上的对象,取出时需要断言。频繁使用会有 GC 压力和性能损耗。)