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 以来的变化》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

编程之魂

编程之魂

Federico Biancuzzi、Shane Warden / 闫怀志 / 电子工业出版社 / 2010-04 / 59.80元

本书是27位杰出的设计师与你分享他们的智慧和经验。书中以问答方式告诉为什么要创建某种编程语言、它在技术上如何开发、如何教授和学习,以及它如何顺应时代发展等。你会发现构建成功编程语言所需的思想和步骤,它广受欢迎的原因,以及如何处理程序员常见的问题。因此,如果你想深入学习设计成功编程语言的思想,本书会对你大有帮助。一起来看看 《编程之魂》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试