Go 语言 2020 年的状态:回顾 Go1.12 以来的变化

栏目: IT技术 · 发布时间: 4年前

内容简介:本文整理自 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 选项,就不会出现完整路径。

Go 语言 2020 年的状态:回顾 Go1.12 以来的变化

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 的性能:

Go 语言 2020 年的状态:回顾 Go1.12 以来的变化

JSON 的性能:

Go 语言 2020 年的状态:回顾 Go1.12 以来的变化

社区

1、tinygo 现在属于 Google 的一个项目

2、Go 开发者网络

这张图不知道怎么来的,很明显,中国的情况不符合啊。

Go 语言 2020 年的状态:回顾 Go1.12 以来的变化

3、2020 年 6 月 22 日 ~ 25 日举行 GopherCon

全球都有各种 Go 语言会议。

总结

该 PPT 还包括了其他一些信息,这里没有一一列出,有兴趣的可以去浏览下。

欢迎关注我的公众号:


以上所述就是小编给大家介绍的《Go 语言 2020 年的状态:回顾 Go1.12 以来的变化》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机科学概论(第7版) (平装)

计算机科学概论(第7版) (平装)

J.Glenn Brookshear / 王保江 / 人民邮电出版社 / 2003-9 / 49.0

《计算机科学概论(第2版)》更新了部分内容,使其更加贴近于计算机科学领域内的最新趋势,这包括了网络安全、开源运动、关联存储、公钥加密、XML、Java和C#等内容。扩充了网络和Internet所覆盖的内容。一个程序用C#语言编写,还有C、C++和Java,作为语言的例子。不过整个方法依旧保持语言的独立。一起来看看 《计算机科学概论(第7版) (平装)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具