导读:Go 1.20正式发布,看看有什么新鲜的。
继 Go 1.19 发布六个月之后,Go 1.20 现已正式发布。该版本的大部分更改都集中在在工具链、运行时和库的实现中。
新版本下载地址:https://go.dev/dl/
Go 1.20 还添加了对 RISC-V 上的 FreeBSD (GOOS=freebsd, GOARCH=riscv64) 的实验性支持。
Go 1.20 在语法方面包含了 4 项变化:
Go 1.7 增加了从 slice (切片)到数组指针转换的功能,Go 1.20 对该功能进行了扩展 —— 可直接从 slice 转换成数组。比如给定一个 slicex,[4]byte(x) 可以写成 *(*[4]byte)(x)。
标准库 unsafe 包定义了 3 个新函数:SliceData,String 和 StringData。与 Go 1.17 的 Slice 一起,这些函数现在提供了构建和解构 slice 和字符串值的完整功能,而不依赖于它们的精确表示。
Go 语言规范进行了更新,定义结构体变量的值每次只比较一个字段,字段比较的顺序和字段在结构体里定义的顺序保持一致。一旦某个字段的值比较出现不一致,就会马上停止比较。
Comparable 类型(例如普通接口 ordinary interfaces)现在可以满足 comparable 约束,即便类型实参 (type argument) 不是严格可比较类型。
一些其他更新内容还包括:
$GOROOT/pkg 目录不再存储标准存档的预编译包存档,以减少 Go 发行版的大小。
go 命令现在定义架构功能 build flags,如 amd64.V2,以允许根据特定 CPU 架构功能的存在或不存在来选择包实现文件。这对于 x86_64 微架构特性级别的工作来说是个好消息。
go build 和 go install 以及其他与构建相关的命令现在支持 “-cover” flag,用于启用带有 code coverage instrumentation 的构建。
由于在垃圾收集器上的工作,内存开销减少和 CPU 性能提高高达 2%。
对 Profile Guided Optimizations (PGO) 的预览支持。
在 Linux 上,linker 现在在链接时为 glibc 或 musl 选择动态解释器。
一个新的 crypto/ecdh 包,为 NIST curves 和 Curve25519 上的 Elliptic Curve Diffie-Hellman 密钥交换提供明确支持。
在此版本中,Go开发团队称对编译器和垃圾收集的改进将 CPU 性能提高了 2%,并减少了内存开销。
Go 团队还报告说构建速度提高了大约 10%,使它们回到了 Go 1.17 中的水平。
虽然,目前 Go 1.20 在从源代码构建时必须从 Go 1.17.13 或更高版本引导,但该团队计划在未来的版本中每年将引导工具链向上移动一次,每年一次。
另一件需要开发者注意的事情是,Go 1.21 将不再支持旧版操作系统,例如 Windows 7、8、Server 2008 和 Server 2012、macOS 10.13 High Sierra 和 10.14 Mojave。
编译:万能的大雄
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。