go在1.18正式推出了泛型,你是否和博主一样好奇其语法呢?快啊来看看吧
1. 版本更新&插件更新
go如何更新到最新版本,可以查看https://www.hengyumo.cn/momoblog/detail/20220417102155
idea插件更新: setting >> plugin >> installed ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KUcGWHUV-1651372224690)(https://www.hengyumo.cn/momoclouddisk/file/download?code=202204171042964_image.png)]](https://img-blog.csdnimg.cn/bf56892593aa4ce89f45597f1ffaa20b.png)
全部更新之后
idea版本更新(可能要更新多次,直到更新到不能更新为止): help >> check update ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gRI4eM3h-1651372224691)(https://www.hengyumo.cn/momoclouddisk/file/download?code=202204171056705_image.png)]](https://img-blog.csdnimg.cn/90cefc5226064fce8d96c7c29a9f604e.png)
在此处勾选上泛型支持 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWZ8C2gM-1651372224692)(https://www.hengyumo.cn/momoclouddisk/file/download?code=202204171047942_image.png)]](https://img-blog.csdnimg.cn/85f4622705fe43a1a246b23361fdd5e3.png)
可以看到,现在使用泛型已经不会报语法错误了: ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iXbIQsGn-1651372224692)(https://www.hengyumo.cn/momoclouddisk/file/download?code=202204171125562_image.png)]](https://img-blog.csdnimg.cn/09a4634e4ba749e1ad6f89c982e00808.png)
2. 基础语法
package test_genericity
import (
"fmt"
)
func MyPrintln[C any](a C) {
fmt.Println(a)
}
func Example_g1() {
MyPrintln(1)
MyPrintln("小王")
MyPrintln([]int{3, 2, 1})
}
any代表任意类型,等于interface{}
func min[T ~int | ~float64](x, y T) T {
if x > y {
return y
} else {
return x
}
}
func Example_g2() {
minInt := min[int]
a := minInt(2, 3)
fmt.Println(a)
b := min[float64](2.0, 3)
fmt.Println(b)
c := min(b, -1)
fmt.Println(c)
}
上例演示了使用~int | ~float64 作为泛型约束,实现了一个可以通用比较int或者float64的min函数。
|