Go Team 一直保持着 2、8 月份发布的节奏。这次 Go 1.13 版本没能在 8 月份发布,而是在美国时间 9 月 3 日发布,delay 的原因据说主要有:
- Brad Fitzpatrick 老婆生二胎,休陪产假了;
- Module 做了很大的改进。
我们先不管这些,看看这次发布的一些信息。
三个链接
在邮件组中,官方宣布 Go1.13 发布,依照惯例,提供了如下三个链接:
- (Go 中文网下载:)
- (Go 中文网文档:)
分别是发布官方博文,下载页面和 Release Notes。
官方博文主要内容
今天 Go 团队非常高兴地宣布 Go 1.13 的发布。 您可以从下载页面获取它。
一些亮点包括:
- 现在,Go 命令默认使用 Go module mirror 和 Go checksum 数据库来下载和验证模块
- 数字字面值的改进
- 错误包装
- 默认启用 TLS 1.3
- 改进的模块支持
有关更改的完整列表以及有关上述改进的更多信息,请参阅 Go 1.13 发行说明 [1] 。
我们要感谢为此版本做出贡献的所有人,包括编写代码,提交错误,提供反馈和/或测试测试版和候选发布版。 您的贡献和勤奋有助于确保Go 1.13尽可能稳定。 也就是说,如果您发现任何问题,请提出问题。
我们希望您喜欢新版本!
关注的特性
Go module 相关
1、升级到 Go 1.13 后 GOPROXY 和 GOSUMDB 都会有默认值,且默认值在国内是无法访问的,所以为了一切正常,建议大家 go env -w GOPROXY=,这个命令是 Go 1.13 新加的,然后 GOSUMDB 就不用改了,因为 goproxy.cn [2] 支持代理它的默认值,所以直接就能用。在 Go1.13 之前,GOPROXY= 即可,逗号列表是 Go1.13 才有的。
2、如果你用了 GOPROXY 或 GOSUMDB,那么你就可能需要了解一下 GONOPROXY、GONOSUDB 还有 GOPRIVATE。前两个是指定 Go 该怎么处理模块的下载与校验;后三个是指定 Go 在那些情况下不应该根据前两个处理。所以,私有库的问题可以解决。
3、关于 GOPROXY,看看 goproxy.cn 的作者发布的文章: goproxy.cn – 为中国 Go 语言开发者量身打造的模块代理 [3] 。
数字字面量语法(Number literals syntax) [4]
这能便于开发者以 二进制 、 八进制 或十六进制 浮点数 的格式定义数字:
- v := 0b00101101, 代表二进制的 101101,相当于十进制的 45。
- v := 0o377,代表八进制的 377,相当于十进制的 255。
- v := 0x1p-2,代表十六进制的 1 除以 2²,也就是 0.25。
而且还允许我们用 _ 来分隔数字,比如说:
v := 123_456 等于 123456。
Error wrapping
Go 1.13 包含对错误包装的支持,如 Error Values 提议 [5] 中首次提出并在相关问题上 讨论 [6] 。
错误 e 可以通过提供返回 w 的 Unwrap 方法来包装另一个错误 w。e 和 w 都可用于程序,允许 e 为 w 提供额外的上下文或重新解释它,同时仍然允许程序基于 w 做出决策。
为了支持包装,fmt.Errorf 现在有一个 %w 动词用于创建包装错误,错误包中的三个新函数(errors.Unwrap,errors.Is 和 errors.As)简化了展开和检查包装错误。
有关更多信息,请阅读 错误包文档 [7] ,或参阅错误值 常见问题解答 [8] 。 很快就会有一篇博客文章。
其他重要的改进
- 逃逸分析优化
- defer大部分提升性能 30%
- sync.pool 优化
- 。。。
完整的改动参考 Release Notes
总结
本次升级,最重要的就属 Go module 了,建议大家使用 goproxy.cn,如果使用中有任何问题,可以到 Go语言中文网( )反馈,作者盛傲飞会进行解答。
参考资料
[1]Go 1.13 发行说明:
[2]goproxy.cn:
[3]goproxy.cn – 为中国 Go 语言开发者量身打造的模块代理:
[4]数字字面量语法(Number literals syntax):
[5]Error Values 提议:
[6]讨论:
[7]错误包文档:
[8]常见问题解答: