内容简介:本文整理自 Slide:https://speakerdeck.com/campoy/the-state-of-go-2020 ,分析 Go1.13 和 Go1.14 的新特性。主要包括如下内容:主要包括:举例:
本文整理自 Slide:https://speakerdeck.com/campoy/the-state-of-go-2020 ,分析 Go 1.13 和 Go1.14 的新特性。主要包括如下内容:
- 语言层面的变化
- 标准库的变化
- 工具的变化
- 社区的情况
语言层面的变化
1、新的数字字面量(Go1.13)
主要包括:
- 增加二进制数字字面量,以0b或0B开头
- 在保留以”0″开头的八进制数字字面量形式的同时,增加以”0o”或”0O”开头的八进制数字字面量形式
- 增加十六进制形式的浮点数字面量,以0x或0X开头的、形式如0x123.86p+2的浮点数
- 为提升可读性,在数字字面量中增加数字分隔符”_”,分隔符可以用来分隔数字(起到分组提高可读性作用,比如每3个数字一组),也可以用来分隔前缀与第一个数字。
举例:
a := 5_3_7 b := 0o700 b1 := 0O700 b2 := 0_700 b3 := 0o_700 c := 0b111 c1 := 0B111 c2 := 0b_111 f1 := 0x10.24p+3 f2 := 0x1.Fp+0 f3 := 0x31_415.p-4
Go 1.13中关于语言规范方面的另一个变动点是 取消了移位操作(>>的<<)的右操作数仅能是无符号数的限制 ,以前必须的强制到uint的转换现在不必要了:
var i int = 5 fmt.Println(2 << uint(i)) // before go 1.13 fmt.Println(2 << i) // in go 1.13 and later version
2、允许嵌入具有重叠方法集的接口(Go1.14)
以下代码在 Go1.14 之前是不允许的,因为 Close 方法重复了。
type ReadWriteCloser interface { io.ReadCloser io.WriteCloser }
Go1.14 开始相同签名(注意,要求签名相同)的方法的不同接口可以内嵌在一个接口中。所以上面的代码在 Go1.14 是允许的。但以下代码 Go1.14 依然不允许,因为两个 Close 的签名不同。
type MyCloser interface{ Close() } type ReadWriteCloser interface { io.ReadCloser MyCloser }
标准库的变化(重要的变化)
1、删除对 SSLv3 的支持(Go1.14)
2、错误处理(Go1.13)
主要增加了 Unwrap、Is 和 As,以及 %w
包装错误。详见: 官方博文:Go 1.13中的错误处理 。
3、os.UserConfigDir() (string, error)(Go1.13)
用户系统的配置路径,如 Linux 下是:$HOME/.config
4、hash/maphash(Go1.14)
这个新包提供了字节序列上的哈希函数。这些哈希函数旨在用于实现哈希表或其他数据结构,这些哈希表或其他数据结构需要将任意字符串或字节序列映射为整数的均匀分布。这些哈希函数具有抗冲突性,但不是加密安全的。
5、reflect.IsZero() (Go1.13)判断是否是 0 值
比如:
reflect.ValueOf(0).IsZero() // true reflect.ValueOf("").IsZero() // true reflect.ValueOf(struct{}{}).IsZero() // true reflect.ValueOf([]string{}).IsZero() // false reflect.ValueOf([]string{nil}).IsZero() // true
6、testing 包的 T、B 和 TB 都加上了 CleanUp 方法(Go1.14)
这对并行测试和子测试有用。 CleanUp(f fun())
在测试和子测试都完成时回调,后进先出的方式执行 f(如果注册多个)。
7、time 包的 Duration 增加了两个方法(Go1.13)
分别是 Milliseconds 和 Microseconds。
工具的变化
1、Go Modules(Go1.13)
这个不多说,Go1.13 发布时,有很多相关文章。比如: 干货满满的 Go Modules 和 goproxy.cn 。
2、go build 增加 -trimpath 选项(Go1.13)
panic 时,文件完整路径会出现,加上 -trimpath
选项,就不会出现完整路径。
Runtime
1、越界错误提示更友好
比如如下问题代码:
a := []int{1, 2, 3} fmt.Println(a[3])
Go1.12 和之前是:
panic: runtime error: index out of range
从 Go1.13 开始变成:
panic: runtime error: index out of range [3] with length 3
2、性能提升:defer、JSON
defer 的性能:
JSON 的性能:
社区
1、tinygo 现在属于 Google 的一个项目
2、Go 开发者网络
这张图不知道怎么来的,很明显,中国的情况不符合啊。
3、2020 年 6 月 22 日 ~ 25 日举行 GopherCon
全球都有各种 Go 语言会议。
总结
该 PPT 还包括了其他一些信息,这里没有一一列出,有兴趣的可以去浏览下。
欢迎关注我的公众号:
以上所述就是小编给大家介绍的《Go 语言 2020 年的状态:回顾 Go1.12 以来的变化》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Go 语言 2020 年的状态:回顾 Go 1.12 以来的变化
- 活动精彩回顾|GopherChina 2019干货回顾!
- Inception系列回顾
- 回顾2017,展望2018
- 我的 2017 年度技术回顾
- F# 2017回顾
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。