在有泛型之前,同样的功能需要为不同的参数类型单独实现一个函数。

1
2
3
4
5
6
7
8
9
func add4int(a, b int) int {
return a + b
}
func add4float32(a, b float32) float32 {
return a + b
}
func add4string(a, b string) string {
return a + b
}

使用泛型

1
2
3
4
5
6
7
8
type Addable interface{
type int, int8, int16, int32, int64,
uint, uint8, uint16, uint32, uint64, uintptr,
float32, float64, complex64, complex128,string
}
func add[T Addable](a,b T)T{
return a+b
}

  在go1.17中泛型默认没有开启,如果想用需要加-gcflags=-G=3,或者设置环境变量export GOFLAGS=“-gcflags=-G=3”。泛型正式版将在go 1.18中发布,但是Go语言之父Rob Pike建议不在Go 1.18的标准库中使用泛型。