Go1.18来了
美国时间 2022年3月16日 Go 1.18 版本正式发布。这个版本比之前基本版本多用了一个月左右时间,也是近期最重要的一个版本,因为范型终于来了。
一、Go 1.18 变化快览
- 范型(Generics)
关于范型的早在2019年的GopherCon,Taylor就有一场关于范型的演讲,文字稿 https://go.dev/blog/why-generics 。
范型来了,让Gopher有了更多可能,对于一些无范型经验的开发其实可以忽略,毕竟毕竟范型对于CRUD项目开发效率提升的影响基本可忽略。
- 模糊测试(Fuzzing)
早期做Web开发,我经常使用JMeter做一个随机参数构造,写Go之后也经常在Benchmark中使用math.rand生成一些随机数做方法/压力测试。go fuzz被集成在testing.F 下,简单看了下Demo 使用还是比较方便。更多内容参照文章结尾链接 ⬇️。
- 工作区(WorkSpace)
工作区是对go mod一个优化。使用go module模式编程引用本地mod有两个方式:1、提交被引用项目到仓库,更新go.mod引用最新的CommitID或者TagID。2、飞线, replace mod 到本地路径,当然这种方法最大的问题是CI就不太方便了。
- 其他重要的变更项目
- go mod vender 支持修改路径
- httpclient禁用 tls1.0 tls1.1
- 默认x509不信任SHA-1签名的证书
二、再说说范型
范型作为本次更新最受瞩目也是影响最大的地方,我们有必要着重关注一下这里。
- 通过Demo认识范型
这是一个官方Demo,在无范型支持的go项目里,实现Sum实现如下
|
有了范型,上面的代码可以写成这样
|
Go1.18 不仅仅支持范型函数,还可以使用 **定义类型约束** 方式
|
上面的代码就定一个叫Number的类型接口,Sum函数可以对应做如下修改。
|
以上就是 关于范型的简单使用,如果你在编程中没有想到使用范型,真心建议别勉强使用,毕竟没有范型只是多C/V几次。
更多关于Go1.18的更新参见: https://go.dev/doc/go1.18
参考