因为本机跑的是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})
}