Go泛型:类型参数与约束
理解Go 1.18引入的泛型语法,编写可复用的类型安全函数与数据结构。 · 难度:入门 · +15XP
泛型简介
泛型允许函数和类型使用类型参数,避免为每种类型重复编写代码。Go泛型基于类型参数和约束(constraint)实现。
基本语法
类型参数写在函数名后的方括号中:
func MaxT comparable T {
if a > b {
return a
}
return b
}注意:comparable是内置约束,允许使用 == 和 !=,但不支持 > 或 <。比较大小需使用 constraints.Ordered(Go 1.21+ 内置)。
自定义约束
使用接口定义约束:
type Number interface {
~int | ~float64
}
func SumT Number T {
var total T
for _, v := range slice {
total += v
}
return total
}
泛型类型
可以定义泛型结构体:
type Stack[T any] struct {
items []T
}
func (s *Stack[T]) Push(item T) {
s.items = append(s.items, item)
}
练习提示
实现一个泛型函数 FilterT any bool) []T,返回所有满足条件的元素。注意不要修改原切片。