写点什么

Golang 1.18 正式版发布,正式加入泛型语言家庭

作者:学神来啦
  • 2022 年 3 月 17 日
  • 本文字数:906 字

    阅读完需:约 3 分钟


大前天,Golang 开发团队正式发 Golang 1.18,可以通过官方下载页面下载,下载后注意核对校验码。



Golang 1.18 是一个功能上变化较大的大型版本,在语言层面增加了泛型、增加了 Fuzzing、工作区以及性能上的改进。之前我们已经文章中虫虫给大家已经详细介绍过,在此,略要地介绍一下。

泛型

Golang 1.18 中,新引入了新的支持使用参数化类型的泛型。支持泛型一直是 Golang 社区最迫切的功能需求之一,今天终于算是圆梦了,Golang 正式跨入泛型语言家族。


func Reverse (type Element) (s []Element) {first := 0last := len(s) - 1for first < last {s[first], s[last] = s[last], s[first]first++last--}}
复制代码


func ReverseAndPrint(s []int) {Reverse(int)(s)fmt.Println(s)}
复制代码


现在大家可以大胆尝试和使用这个功能,官方也提供了文档、范例和视频教程可供参考。


Fuzzing

Golang 1.18 是第一个具有模糊测试的版本,并被完全集成到其标准工具链中。 像泛型一样,模糊测试在设计中已经存在很长时间了,现在终于正式得到支持。


func FuzzReverse(f *testing.F) {testcases := []string {"Hello, world", " ", "!12345"}for _, tc := range testcases {f.Add(tc)}f.Fuzz(func(t *testing.T, orig string) {rev, err1 := Reverse(orig)if err1 != nil {return}doubleRev, err2 := Reverse(rev)if err2 != nil {return}if orig != doubleRev {t.Errorf("Before: %q, after: %q", orig, doubleRev)}if utf8.ValidString(orig) && !utf8.ValidString(rev) {t.Errorf("Reverse produced invalid UTF-8 string %q", rev)}})}
复制代码


工作区

Go 模块目前已经得到被普遍采用,并且收获了开发者的良好口碑。但是对跨多模块工作是个难题,为此 Golang 1.18 中,新引入了工作区模块就是为了解决这个问题,让跨多个模块开发变得简单。


关于工作区的文档详见官方文档。

性能改善

对于 Apple M1、ARM64 和 PowerPC64 用户有一个好消息。Golang 1.18 可以让你的 CPU 性能提升提高 20%以上。 由于 Golang 1.17 的 register ABI 调用约定扩展到这些架构。

总结

1.18 对整个 Golang 社区来说是一个巨大的里程碑。 希望大家尽快更新,入场享受新版本带来的红利。


有什么疑问可以滴滴小编



用户头像

学神来啦

关注

还未添加个人签名 2021.06.02 加入

10年Linux使用及管理经验,7年IT在线教育培训经验。精通Linux、Python、思科、C++、安全渗透等技术。曾任职国内知名互联网公司高级运维架构师、运维总监。对基于Linux下开源程序Openstack、Docker、K8S、DevOps、

评论

发布
暂无评论
Golang 1.18正式版发布,正式加入泛型语言家庭_Go_学神来啦_InfoQ写作平台