2021.12.14 Go 1.18 Beta1发布,于是趁着周末有空,赶紧体验一下。
01
安装Go 1.18 Beta1版本


02
泛型语法体验
下面我们以两数相加来看下使用泛型前后的差异。使用泛型前:
package main
func main() {
println(add(1, 2)) // 3
}
// add 两数相加
func add(x, y int) int {
return x + y
}复制
如上,入参必须为int,如果是int32、int64则必须强转后再传入。如果使用泛型:
package main
func main() {
println(add(1, 2)) // 3
}
// add 两数相加
func add[T ~int|~int32|~int64](x, y T) T {
return x + y
}复制
与泛型前相比,在函数名后多了[T ~int|~int32|~int64],且入参、出参的类型改成了T,其余不变。
03
泛型的优势
前面的示例只是简单说明下泛型的语法,并没有体现出泛型的优势,下面我们以排序算法来说明下泛型的优势。
有泛型前,标准库sort提供了sort.Ints、sort.Float64s、sort.Strings等多个方法来完成排序;有了泛型后,我们只要实现一个Sort方法即可实现排序功能
package main
import (
"constraints"
"fmt"
)
func main() {
s1 := []int{4, 2, 3, 9, 6}
fmt.Println("排序前:", s1) // 排序前: [4 2 3 9 6]
Sort(s1)
fmt.Println("排序后:", s1) // 排序后: [2 3 4 6 9]
s2 := []string{"11", "23", "43", "5", "07", "12345"}
fmt.Println("排序前:", s2) // 排序前: [11 23 43 5 07 12345]
Sort(s2)
fmt.Println("排序后:", s2) // 排序后: [07 11 12345 23 43 5]
}
func Sort[T constraints.Ordered](nums []T) []T {
for i := 1; i < len(nums); i++ {
for j := i - 1; j >= 0 && nums[j] > nums[j+1]; j-- {
nums[j], nums[j+1] = nums[j+1], nums[j]
}
}
return nums
}复制
文章转载自wms的笔记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。