Golang在1.18时才支持了泛型,为此新增了两个操作符,|
和~
。
~ T: 表示底层类型是T,比如 ~string表示所有基于string创建的自定义类型。
T1 | T2 |...: 代表或
,类型列表之一。
Go的泛型有别于其它语言的方案,在Go语言中泛型叫做Type Parameter(类型参数).
Golang的泛型:
- 1.18才有
- 只能用在方法上,无法使用在结构体上
- 泛型下边界需要在类型上使用
~
表达式
泛型的示例
type myStr string
type customType interface {
float32 | float64 | int | int8 | int32 | int16 | int64 | uint | uint8 | uint32 | uint16 | uint64 | ~string
}
func min[T customType](a, b T) T {
if a > b {
return b
}
return a
}
func main() {
// 泛型
fmt.Println(min(1, 2))
fmt.Println(min(1.1, 2.2))
fmt.Println(min("3", "2"))
// 自定义类型泛型
num1 := myStr("33")
num2 := myStr("344")
fmt.Println(min(num1, num2))
}