Skip to content
On this page

泛型(Go 1.18+)

类型形参

go
func Min[T constraints.Ordered](a, b T) T {
    if a < b {
        return a
    }
    return b
}

调用时可显式 Min[int](1, 2) 或依赖类型推断 Min(1, 2)

类型约束

  • 接口作为约束:满足该接口的类型集可作为 T
  • constraints.Ordered(标准库 constraints,自 Go 1.18):满足 < 等有序比较的类型集合;Go 1.21+ 亦常用 cmp.Compare / cmp.Less 配合泛型工具。
  • comparable:预声明约束,可用 ==/!= 的类型(含许多具体类型与接口比较规则)。
go
func Keys[K comparable, V any](m map[K]V) []K {
    out := make([]K, 0, len(m))
    for k := range m {
        out = append(out, k)
    }
    return out
}

泛型类型

go
type Node[T any] struct {
    Value T
    Next  *Node[T]
}

方法可带额外接收者类型形参(较少用):

go
func (n *Node[T]) Clear() {
    var zero T
    n.Value = zero
}

限制与注意

  • 不能用类型形参做类型断言的目标(如 x.(T) 非法)。
  • 泛型函数内不能声明同名类型形参与外层类型同名遮蔽易混,注意命名。
  • 实例化后单态化(monomorphization)风格由编译器实现;性能通常接近手写特化,极端热点应用 pprof 验证。

标准库泛型 API

Go 1.21+:slicesmapscmp 等包提供切片/映射的泛型工具函数,优先复用而非自写。

技术文库