Go 1.18这个大型版本终于发布了,包括新功能、性能改进以及对语言的最大改变。 官方博客称Go 1.18的部分设计甚至开始于10年前首次发布Go的时候。具体来说,Go 1.18包含以下几大特性:

  • 泛型(Generics): Go 1.18开始引入了泛型的支持。现在我们可以从Go官方的泛型教程来学习这个新特性,另外在Go 1.18的发布说明中也有很多关于泛型的使用细节。
  • 模糊测试(Fuzzing): Go成为第一个将模糊测试完全集成到其标准工具链中的主要语言。可以从Go官方的Fuzzing教程中开始学习。
  • 工作空间(Workspaces): Go Module已经被广泛使用,目前Gopher在使用Go Module时最常见的挑战是如何应对在多个Module间工作。Go 1.18通过新的Go工作空间模式解决了这一问题。
  • 20%性能提升: AppleM1、ARM64和PowerPC64用户会很开心! 因为Go 1.17的寄存器ABI调用约定扩展到这些架构,Go 1.18提供了高达20%的性能改进。

安装Go 1.18

我在开发机上上的Go版本管理策略如下: 使用MacOS Homebrew安装的go作为主要版本, 因为Go的Homebrew Formula版本更新会延迟Go官方的发布。 所以为了体验Go新版本的特性或者同时在本地保留多个Go的版本,会使用Go Wrapper程序golang.org/dl下载对应版本的Go Wrapper,再使用Wrapper下载安装对应的Go。

为了安装和体验Go 1.18,先使用go install安装Go 1.18的Wrapper:

1
go install golang.org/dl/go1.18@latest

使用wrapper安装Go 1.18:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
go1.18 download
Downloaded   0.0% (    16384 / 143698502 bytes) ...
Downloaded   0.1% (    98304 / 143698502 bytes) ...
Downloaded   7.4% ( 10616752 / 143698502 bytes) ...
Downloaded  15.3% ( 21987168 / 143698502 bytes) ...
Downloaded  23.4% ( 33586944 / 143698502 bytes) ...
Downloaded  31.6% ( 45399728 / 143698502 bytes) ...
Downloaded  39.5% ( 56802896 / 143698502 bytes) ...
Downloaded  47.5% ( 68320768 / 143698502 bytes) ...
Downloaded  55.8% ( 80231840 / 143698502 bytes) ...
Downloaded  63.5% ( 91307344 / 143698502 bytes) ...
Downloaded  71.5% (102710528 / 143698502 bytes) ...
Downloaded  78.4% (112704688 / 143698502 bytes) ...
Downloaded  86.0% (123583584 / 143698502 bytes) ...
Downloaded  93.7% (134691840 / 143698502 bytes) ...
Downloaded 100.0% (143698502 / 143698502 bytes)
Unpacking $HOME/sdk/go1.18/go1.18.darwin-amd64.tar.gz ...
Success. You may now run 'go1.18'

查看Go 1.18的安装位置:

1
go1.18 env GOROOT

使用时以wrapper程序go1.18作为go命令使用。

如果以VS Code作为IDE,是可以将VS Code的Go扩展插件的配置go.goroot指定为go 1.18的安装位置的,以让VS Code使用go 1.18。 当然,我这里不推荐你添加go.goroot的配置,因为VS Code的Go扩展可以自动发现已经安装的Go版本:

可以通过查看VS Code左下角的状态栏项目来查看当前的Go版本,通过点击这个状态栏项目,并通过Choose Go Environment来切换选择使用某个Go版本。

参考