在有泛型之前,同样的功能需要为不同的参数类型单独实现一个函数。
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的标准库中使用泛型。