Golang在1.18时才支持了泛型,为此新增了两个操作符,|~

~ T: 表示底层类型是T,比如 ~string表示所有基于string创建的自定义类型。
T1 | T2 |...: 代表,类型列表之一。

Go的泛型有别于其它语言的方案,在Go语言中泛型叫做Type Parameter(类型参数).

Golang的泛型:

  1. 1.18才有
  2. 只能用在方法上,无法使用在结构体上
  3. 泛型下边界需要在类型上使用 ~ 表达式

泛型的示例

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))
    
}