Skip to content

Instantly share code, notes, and snippets.

@Kuri-su
Last active March 11, 2021 06:04
Show Gist options
  • Save Kuri-su/ab470ebfe43902c4311675df8928f9f2 to your computer and use it in GitHub Desktop.
Save Kuri-su/ab470ebfe43902c4311675df8928f9f2 to your computer and use it in GitHub Desktop.
features of golang 1.16

features of golang 1.16

[TOC]

另外推荐补充阅读 Team Go 写的 Go Module 相关的更新细节, [New module changeds in Go 1.16](// TODO) (ZH 已翻译// TODO)

前言

今天, Go 团队非常开心的释出 Go 1.16 版本,

一个新的 embed 包使用 新的 //go:embed 来提供对在编译时嵌入的文件的访问. 现在你可以使用 embad 包, 轻松的将数据文件 捆绑到 Go 程序中, 从而使用 Go 进行开发更加流畅. 你可以参照 embed 包的 文档 进行开发. Carl Johnson 也写了一篇不错的教程 "How to use Go embed" (EN)

Go 1.16 也增加了对 MacOS ARM64 处理器的支持 , 自从 Apple 宣布它的 ARM64 架构以来, Team Go 一直在与 Apple 紧密合作, 以确保 Go 得到完整支持. 若要参阅更多信息, 可以阅读 Team Go 的博客 "Go on ARM and Beyond" (EN)

另外, Go 1.16 中, 已经默认启用 Go Modules 作为 包管理工具. 根据 Team Go 在 2020 的开发人员调查, 现在有 96% 的 Go 开发人员已经在使用 Go Modules. 另外 Team Go 最新释放出了 关于 开发和发布模块 的官方文档

最后, 还有许多 其他改进和错误修复, 包括 构建速度提升了 25%, 构建时的内存使用减少了 15%.

这次更新的大部分是在 工具链, Runtime , 以及 库的实现中进行的. 与之前一样, 这个版本遵守了对 Go 1 的兼容性承诺.

语法层面的修改

平台支持

Darwin 和 iOS

Go 1.16 增加了对 macOS ARM64 架构的支持(GOOS=darwin, GOARCH=arm64), 就像 darwin/AMD64 一样, darwin/ARM64 也支持 cgo, 内连和外连, c-archive, c-shared 以及 pie 构建模式, 以及 竞态条件检测.

在 iOS 上, 已经将 iOS 的 build tag 重命名为 ios/arm64, GOOS = ios 其实是在为 darwin 构建, 就像 GOOS=android 事实上是在使用 GOOS=linux 构建. 这样能够让 gomobile 的开发者在为 iOS 构建 App 时更加清晰.

Go 1.16 也增加了 ios/amd64 支持, 它的目标是运行在基于 AMD64 的 macOS 的 iOS 模拟器上. 以前, 这是通过使用 darwin/amd64 非正式的支持这一特性. 关于 iOS 和 iOS 模拟器构建程序的详情可以参阅 这里

Go 1.16 支持在 macOS 10.12 Sierra 上运行, Go 1.17会支持 macOS 10.13 High Sierra 以及更高版本上运行.

NetBSD

Go 1.16 目前支持在 ARM64 的 NetBSD 系统上运行(build tag netbsd/arm64)

OpenBSD

Go 1.16 目前支持在 MIPS64 架构 的 OpenBSD 系统上运行 (build tag openbsd/mips64). 目前尚未支持 cgo.

在 OpenBSD 的 x86 和 ARM64 架构上, Go 目前是通过 libc 进行系统调用, 而不是直接使用 SYSCALL/SVC 指令. 这样可以确保对 OpenBSD 的未来版本兼容. 另外, 从 OpenBSD 6.9起, 对于 非静态的 Go 二进制文件(比如 go plugins 机制), 需要通过 libc 进行系统调用.

386

正如 在 Go 1.15 更新日志中说的那样, Go 1.16 停止了对 x87 的支持 (GO386=387). 现在可以使用 softfloat 模式来支持 非 SSE2 处理器. 在 非 SSE2 处理器上运行的用户, 应该将 GO386=387 替换为 GO386=softfloat

RISC-V

linux/riscv64 目前支持 cgo 和 pie 构建模式. 并且对 RISC-V 下, Go 的性能和代码生成有所优化

Tools

Go command

Modules

模块感知 模式 已经默认开启, // TODO https://golang.org/doc/go1.16

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment