Go 1.12 版本的新特性

Go 1.12

昨天,Go 官方发布 1.12 版本。本文介绍下 Go 1.12 版本变动的内容。golang

Go 1.12 正式版发布了,距离上个正式发布版 Go 1.11 已通过去半年。跟往常同样,Go 1.12 保持了 兼容性承诺,预期全部 Go 程序会像以前同样正常编译。新版本的更新亮点有: TLS 1.3 的初步支持、模块支持的更强大以及提高 macOS & iOS 的前向兼容性。新版在语言规范方面没作改动。api

Golang
Golang

工具

  • go tool vet 再也不支持;
  • 二进制包在下个版本将再也不支持;
  • go tool tour 再也不包含在主二进制发行版中,须要手动安装;
  • Go 1.12 在 trace 工具加入了Mutator Utilization 图的支持,它能够方便发现 GC 性能受限的状况;
  • Go Module 进一步支持。计划在 Go 1.13 默认启用 module 模式。

GO111MODULE 设置为 on 时,go 命令如今支持模块目录以外的模块感知操做,前提是这些操做不须要解析相对于当前目录的导入路径或显式编辑 go.mod 文件。诸如 go getgo listgo mod download 之类的命令就像在具备初始空要求的模块中同样。缓存

go 命令下载和解压缩模块如今能够安全地同时调用。模块高速缓存(GOPATH/pkg/mod)必须驻留在支持文件锁定的文件系统中。安全

go.mod 文件中的 go 指令如今指示该模块中文件使用的语言版本。若是没有现有版本,它将被设置为当前版本(go 1.12)。若是模块的go指令指定的版本比正在使用的工具链更新,则 go 命令将尝试构建软件包,而且仅在该构建失败时才会记录不匹配。微信

当使用活动模块没法解析导入时,go 命令如今将在查询模块高速缓存和经常使用网络源以前尝试使用主模块的replace 指令中提到的模块。若是找到匹配的替换但但replace指令未指定版本,则 go 命令使用从零time.Time(例如 v0.0.0-00010101000000-000000000000)派生的伪版本。网络

Runtime

  • 提高了大量堆(Heap)活跃状态状况下的清理性能,这减小了垃圾回收以后的分配延迟,能够更好地将内存释放回操做系统;
  • Runtime 的 timer 和 deadline 代码随着 CPU 数目的增长,会有更好的表现。这提高了网络链接最后期限(deadline)相关操做的性能;
  • 对大型堆分配的相关修复,提高了内存配置文件的精确性;

平台相关

其中关于 FreeBSD 和 macOS,Go 1.12 是最后一个支持 FreeBSD 10.x 和 macOS 10.10 Yosemite 的版本。下个版本的 Go 1.13 将要求 FreeBSD 11.2+ 或 FreeBSD 12.0+,对于 macOS,则要求 macOS 10.11 El Capitan 或更新版本。工具

核心库

  • TLS 1.3

Go 1.12 在 RFC 8446 指定的crypto/tls包中添加了对 TLS 1.3 的选择支持。能够经过将值 tls13 = 1 添加到 GODEBUG 环境变量来启用它。 它将在 Go 1.13 中默认启用。性能

  • 库的微小变动。与往常同样,承诺保持 Go 1的兼容性状况下,库中有各类微小的更改和更新。

小结

Go 的包管理是一直为人诟病,从 Go 1.5 引入的 vendor 机制,到准官方工具depgo modules 随着 Go 1.11 的发布而和咱们见面了,这是官方提倡的包管理,乃至项目管理机制,能够再也不须要GOPATH的存在。到当前的 Go 1.12 ,Go 语言作了不少努力,正如 Go 官方博客所说:操作系统

2018 was a great year for the Golang ecosystem, with package management as one of our major focuses.日志

2018 年是 Go 生态系统的重要一年,包装管理是咱们的主要关注点之一。 2018 年 2 月,在社区范围内讨论如何将软件包管理直接集成到Go工具链中,而且在8月份,Go 1.11中提供了该功能的第一个粗略实现,称为 go modules。 迁移到 go modules 将是 Go 生态系统中影响最深远的变化。转换整个生态系统:代码、用户、工具等。从 GOPATH 转换到模块将须要在许多不一样领域开展工做。 模块系统将帮助咱们为Go生态系统提供更好的身份验证和构建速度。

相比 godep 和 vendor 机制而言,go modules 已经很先进,Go 1.12 已经发布,能够考虑逐步迁移到go modules。

了解更详细的发布日志,查看原文

订阅最新文章,欢迎关注个人公众号

微信公众号

参考

  1. Go 1.12 Release Notes
  2. Go Modules in 2019
相关文章
相关标签/搜索