介绍
最新的 Go 版本1.16在 Go 1.15发布6个月后发布。它的大多数变化都发生在工具链、运行时和库的实现中。一如既往,发布版维护了Go 1.x版本的兼容性承诺, 新版本完全兼容之前版本的项目.
更新
- 如果你使用了 goup、gvm 这样的工具,使用这些工具更新即可。
- 配置 GOPROXY 后,通过
go get golang.org/dl/go1.16
来更新。 - 源码下载安装
增加对 macOS ARM64 的支持
Go 1.16 还添加了macOS ARM64 支持(Apple新的M1芯片平台)GOOS = darwin,GOARCH = arm64
。iOS 的端口以前是 darwin/arm64,现在已经改名为 iOS/arm64。
1.16是 macOS 10.12 Sierra 上运行的最后一个版本。1.17需要 macOS 10.13 High Sierra 或更高版本。
默认启用 Module
注意,Go 1.16 默认使用 Go 模块 , 而不管当前工作目录目录或父目录中是否存在 go.mod 文件。预计在Go 1.17版本的时候, 将会完全移除GOPATH变量.
go build
和go test
这样的构建命令不再默认修改 go.mod 和 go.sum- 如果要修改依赖, 需要使用
go mod tidy
或者go get
命令 - 使用新增配置变量 GOVCS 指定特定模块使用特定版本控制工具
embed 包和 //go:embed 指令
新的 embed 包使用新的 //go:embed 指令(//
之后没有空格),在编译时嵌入的文件,并对其进行访问。现在可以轻松地将静态资源文件嵌入到 Go 程序中,从而使使用 Go 进行开发更加顺畅。通过它,真正做到部署时只有一个二进制文件。
|
|
通过对变量 s
声明 go:embed
指令,使其在编译时读取当前目录下的 hello.txt
文件。
新增 io/fs 的支持
新增了标准库 io/fs,正式将文件系统相关的基础接口抽象到了该标准库中。
以前的话大多是在 os 标准库中,这一步抽离更进一步的抽象了文件树的接口。在后续的版本中,大家可以优先考虑使用 io/fs 标准库。
ioutils包已经废弃
1.16已经标记io/ioutil为废弃,函数被转移到了os和io这两个包里,具体见下表:
ioutil旧函数 | 新函数 |
---|---|
Discard | |
NopCloser | io.NopCloser |
ReadAll | io.ReadAll |
ReadDir | os.ReadDir |
ReadFile | os.ReadFile |
WriteFile | os.WriteFile |
TempDir | os.MkdirTemp |
TempFile | os.CreateTemp |