Please enable Javascript to view the contents

Golang1.16版本发布

 ·  ☕ 2 分钟

介绍

最新的 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 buildgo test 这样的构建命令不再默认修改 go.mod 和 go.sum
  • 如果要修改依赖, 需要使用go mod tidy 或者go get命令
  • 使用新增配置变量 GOVCS 指定特定模块使用特定版本控制工具

embed 包和 //go:embed 指令

新的 embed 包使用新的 //go:embed 指令(//之后没有空格),在编译时嵌入的文件,并对其进行访问。现在可以轻松地将静态资源文件嵌入到 Go 程序中,从而使使用 Go 进行开发更加顺畅。通过它,真正做到部署时只有一个二进制文件。

1
2
3
4
5
import _ "embed"

//go:embed hello.txt
var s string
print(s)

通过对变量 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
分享

三排三号
作者
三排三号
Backend Programmer