因为本机跑的是go1.17,想体验一下go1.18泛型。随决定采用docker方式
docker pull golang
docker run -itd -p 8001:8001 -v /Users/cc/docker/golang1.18:/go --name golang-1.18 golang
docker exec -it golang-1.18 /bin/sh
go env -w GO111MODULE=on
go env -w GOPROXY="https://goproxy.cn"
go env -w GOPATH="/go"
初体验
语法:
MyType[T1 constraint1 | constraint2, T2 constraint3...] ...
- MyType可以是函数名, 结构体名, 类型名等
- T1, T2…是泛型名, 可以随便取
- constraint的意思是约束
- 用 | 可以分隔多个constraint, T满足其中之一即可
Constraint(约束)
- any(interface{}, 任何类型都能接收)
- Interger(所有int, int64 int32…)
- 等等
案例:
package main
import "fmt"
func Print[T any](s []T) {
for _, v := range s {
fmt.Println(v)
}
}
func main() {
Print[int]([]int{1, 21, 90})
Print[float64]([]float64{1.1, 2.2})
}