昨天,Go 官方发布 1.12 版本。本文介绍下 Go 1.12 版本变动的内容。golang
Go 1.12 正式版发布了,距离上个正式发布版 Go 1.11 已通过去半年。跟往常同样,Go 1.12 保持了 兼容性承诺,预期全部 Go 程序会像以前同样正常编译。新版本的更新亮点有: TLS 1.3 的初步支持、模块支持的更强大以及提高 macOS & iOS 的前向兼容性。新版在语言规范方面没作改动。api
go tool vet
再也不支持;go tool tour
再也不包含在主二进制发行版中,须要手动安装;Go 1.13
默认启用 module 模式。当 GO111MODULE
设置为 on
时,go 命令如今支持模块目录以外的模块感知操做,前提是这些操做不须要解析相对于当前目录的导入路径或显式编辑 go.mod
文件。诸如 go get
,go list
和 go 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
)派生的伪版本。网络
其中关于 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 或更新版本。工具
Go 1.12 在 RFC 8446 指定的crypto/tls
包中添加了对 TLS 1.3 的选择支持。能够经过将值 tls13 = 1
添加到 GODEBUG
环境变量来启用它。 它将在 Go 1.13
中默认启用。性能
Go 1
的兼容性状况下,库中有各类微小的更改和更新。Go 的包管理是一直为人诟病,从 Go 1.5 引入的 vendor 机制,到准官方工具dep
,go 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。
了解更详细的发布日志,查看原文。