Skip to content

generics

泛型(Generics)

优势 说明
代码复用 一套逻辑适配多种类型,减少重复
类型安全 编译期检查,杜绝运行时类型错误
性能提升 避免 interface{} 装箱,减少内存分配
标准库增强 slices, maps, cmp 等提供强大工具
可读性提升 函数签名明确表达类型关系

为什么 Go 不支持泛型方法(可以在结构体使用泛型或函数使用泛型来代替)

  • 如果 Go 允许方法级别的泛型,那么在编译时,编译器必须知道所有调用该方法的地方,才能生成对应的代码。(降低编译速度)
  • 降低运行时速度
  • 增加语言复杂度

如何约束泛型?

通过 定义接口(interface) 来约束泛型。

  • 约束字段类型
  • 约束必须实现接口方法

泛型和any/interface{}如何取舍?

  • 仅需存储多类型值且无类型相关操作的场景,建议使用any
  • 涉及装箱(Boxing)和类型断言时建议使用泛型。(基本类型存入 any 时会转换为堆上的对象,取出时需要断言。频繁使用会有 GC 压力和性能损耗。)

Comments