Go泛型:类型参数与约束
掌握Go 1.18引入的泛型,编写可复用的类型安全函数和数据结构。 · 难度:入门 · +15XP
Go泛型基础
泛型允许您编写与特定类型无关的代码,通过类型参数(type parameter)实现。语法:func FuncNameT constraint ReturnType。约束(constraint)通常使用interface定义,例如any(所有类型)、comparable(可比较类型)或自定义约束。
常见内置约束
| 约束 | 说明 |
|---|---|
| any | 任意类型 |
| comparable | 支持 == 和 != 的类型 |
| constraints.Ordered | 支持 < <= > >= 的类型(需导入golang.org/x/exp/constraints) |
代码示例:泛型栈
package main
import "fmt"
type Stack[T any] struct {
items []T
}
func (s *Stack[T]) Push(item T) {
s.items = append(s.items, item)
}
func (s *Stack[T]) Pop() (T, bool) {
if len(s.items) == 0 {
var zero T
return zero, false
}
item := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return item, true
}
func main() {
intStack := Stack[int]{}
intStack.Push(10)
intStack.Push(20)
if val, ok := intStack.Pop(); ok {
fmt.Println("Popped:", val)
}
stringStack := Stack[string]{}
stringStack.Push("hello")
stringStack.Push("world")
fmt.Println(stringStack.Pop())
}
练习提示
实现一个泛型函数MinT constraints.Ordered T,返回较小值。注意导入constraints包。