配好环境:选择一种最适合你的Go安装方法

7/31/2022 goTong Bai·Go语言第一课geektime

# 配好环境:选择一种最适合你的Go安装方法

编程不是“纸上谈兵”,它是一门实践的艺术。编程语言的学习离不开动手实践,因此学习任何一门编程语言的第一步都是要拥有一个这门编程语言的开发环境,这样我们才可以动手编码,理论与实践结合,不仅加速学习效率,还能取得更好的学习效果。

在这一讲中我们就先来学习下如何安装和配置 Go 语言开发环境。如果你的机器上还没有 Go,那么就请跟我一起选择一种适合你的 Go 安装方法吧。第一步,先来挑一个合适的 Go 版本。

# 选择 Go 版本

挑版本之前,我们先来看看 Go 语言的版本发布策略

如今,Go 团队已经将版本发布节奏稳定在每年发布两次大版本上,一般是在二月份和八月份发布。Go 团队承诺对最新的两个 Go 稳定大版本提供支持,比如目前最新的大版本是 Go 1.18,那么 Go 团队就会为 Go 1.18 和 Go 1.167版本提供支持。如果 Go 1.19 版本发布,那支持的版本将变成 Go 1.19 和 Go 1.18。支持的范围主要包括修复版本中存在的重大问题、文档变更以及安全问题更新等。

基于这样的版本发布策略,在你选择版本时可以参考这几种思路:

一般情况下,我建议你采用最新版本。因为 Go 团队发布的 Go 语言稳定版本的平均质量一直是很高的,少有影响使用的重大 bug。你也不用太担心新版本的支持问题,Google 的自有产品,比如 Google App Engine(以下简称为 GAE)支持都会很快,一般在 Go 新版本发布不久后,GAE 便会宣布支持最新版本的 Go。

你还可以根据不同实际项目需要或开源社区的情况使用不同的版本。

有的开源项目采纳了 Go 团队的建议,在 Go 最新版本发布不久就将当前项目的 Go 编译器版本升级到最新版,比如 Kubernetes 项目;而有的开源项目(比如:docker 项目)则比较谨慎,在 Go 团队发布 Go 1.17 版本之后,这些项目可能还在使用两个发布周期之前的版本,比如 Go 1.15。

但多数项目处于两者之间,也就是使用次新版,即最新版本之前的那个版本。比如,当前最新版本为 Go 1.18,那么这些项目会使用 Go 1.17 版本的最新补丁版本(Go 1.17.x),直到发布 Go 1.19 后,这些项目才会切换到 Go 1.18的最新补丁版本(Go 1.18.x)。如果你不是那么“激进”,也可以采用这种版本选择策略。

建议你直接使用 Go 最新发布版,这样我们可以体验到 Go 的最新语言特性,应用到标准库的最新 API 以及 Go 工具链的最新功能。

选定 Go 版本后,接下来我们就来看看几种常见的 Go 安装方法。

# 安装 Go

Go 从 2009 年开源并演化到今天,它的安装方法其实都已经很成熟了,接下来呢,我们就逐一介绍在 Linux、macOS这两大主流操作系统上安装 Go 的方法,对于Windows平台则跳过了。


温馨提示

虽然 Go 官方下载站点是 golang.org/dl ,但我们可以用针对中国大陆的镜像站点 golang.google.cn/dl 来下载,在中国大陆地区使用大陆镜像站点可以大幅缩短下载时间。


我们假设这些操作系统都安装在 X86-64 的平台上,首先我们来看 Linux。

在 Linux 上安装 Go

Go 几乎支持 Linux 所有的主流发行版操作系统,常见的包括 Ubuntu、CentOS(Redhat 企业版 Linux 的社区开源版)、Fedora、SUSE 等等,Go 在这些主流的 Linux 发行版操作系统上的安装方法都是一样的(当然某个发行版也可能会利用其软件安装管理器提供仅属于其自己的安装方法)。你可以参考下面这样的安装步骤。

首先,我们需要下载并解压 Go Linux 安装包:

$ wget -c https://golang.google.cn/dl/go1.16.5.linux-amd64.tar.gz

$ tar -C /usr/local -xzf go1.16.5.linux-amd64.tar.gz
1
2
3

执行完上面解压缩命令后,我们将在 /usr/local 下面看到名为 go 的目录,这个目录就是 Go 的安装目录,也是 Go 官方推荐的 Go 安装目录。我们执行下面命令可以查看该安装目录下的组成:

$ ls -F /usr/local/go
AUTHORS          CONTRIBUTORS  PATENTS    SECURITY.md  api/  doc/         lib/   pkg/        src/
CONTRIBUTING.md  LICENSE       README.md  VERSION      bin/  favicon.ico  misc/  robots.txt  test/
1
2
3

不过呢,为了可以在任意路径下使用 go 命令,我们需要将 Go 二进制文件所在路径加入到用户环境变量 PATH 中(以用户使用 bash 为例),具体操作是将下面这行环境变量设置语句添加到 $HOME/.profile 文件的末尾,然后执行source命令使上述环境变量的设置立即生效。

$ nvim  $HOME/.profile
---
export PATH=$PATH:/usr/local/go/bin
---

$ source ~/.profile
1
2
3
4
5
6

最后,我们可以通过下面命令验证此次安装是否成功。如果这个命令输出了“go version go1.16.5 linux/amd64”,那么说明我们这次的 Go 安装是成功的。

$ go version
1

在 macOS 上安装 Go

如果在macOS上安装过 Xcode 软件,可以安装包管理程序,在这里推荐使用 brewmacPort

"Method.01"
$ brew install go


"Method.02"# port install go
1
2
3
4
5
6

当然了,在 Mac 上,我们也可以采用像 Linux 那样的通过命令行安装 Go 的方法,如果采用这种方法,我们就要下载下面的 Mac Go 安装包:

$ wget -c https://golang.google.cn/dl/go1.16.5.darwin-amd64.tar.gz
1

后续的步骤与 Linux 上安装 Go 几乎没有差别,直接参考上面的就好了。

除此之外,在 Mac 上我们也可以在图形界面的引导下进行 Go 的安装。不过,我们先要下载适用于 Mac 的 Go 安装包:

$ wget -c https://golang.google.cn/dl/go1.16.5.darwin-amd64.pkg
1

安装包下载完毕后,我们可以双击安装包,打开标准的 Mac 软件安装界面,按软件安装向导提示,一路点击“继续”,我们便可以完成 Go 在 Mac 上的安装。

和 Linux 一样,Mac 上的 Go 安装包默认也会将 Go 安装到 /usr/local/go 路径下面。因此,如果要在任意路径下使用 Go,我们也需将这个路径加入到用户的环境变量 PATH 中。具体操作方法与上面 Linux 中的步骤一样,也是将下面环境变量设置语句加入到 $HOME/.profile 中,然后执行 source 命令让它生效就可以了:

$ nvim  $HOME/.profile
---
export PATH=$PATH:/usr/local/go/bin
---

$ source ~/.profile
1
2
3
4
5
6

最后,我们同样可以通过 go version 命令验证一下这次安装是否成功。

# 安装多个 Go 版本

一般来说,Go 初学者安装一个最新的 Go 版本就足够了,但随着 Go 编程的深入,我们通常会有使用多个 Go 版本的需求,比如一个版本用于学习或本地开发,另外一个版本用于生产构建等等。

安装多个 Go 版本其实也很简单,这里介绍三种方法。

方法一:重新设置 PATH 环境变量

你只需要将不同版本的 Go 安装在不同路径下,然后将它们的 Go 二进制文件的所在路径加入到 PATH 环境变量中就可以了。

我们以 Linux 环境为例,在前面介绍 Go 标准安装方法的时候,我们已经将 Go 1.16.5 版本安装到了 /usr/local/go 下面,也将 /usr/local/go/bin 这个路径加入到了 PATH 路径下了,当前状态我们在任意路径下敲入 go,执行的都是 Go 1.16.5 版本对应的 Go 二进制文件。

那这个时候,如果我们想再安装一个 Go 1.15.13 版本要怎么办呢?

首先,你需要按照标准步骤将 Go 1.15.13 安装到事先建好的 /usr/local/go1.15.13 路径下:

$ mkdir /usr/local/go1.15.13
$ wget -c https://golang.google.cn/dl/go1.15.13.linux-amd64.tar.gz
$ tar -C /usr/local/go1.15.13 -xzf go1.15.13.linux-amd64.tar.gz
1
2
3

接下来,我们来设置 PATH 环境变量,修改原先 $HOME/.profile 中的 PATH 变量的值即可:

export PATH=$PATH:/usr/local/go/bin

===>>> ===>>> ===>>>
export PATH=$PATH:/usr/local/go1.15.13/go/bin
1
2
3
4

这样通过执行 source 命令重新使 PATH 环境变量生效后,我们再执行 go version 命令,会得到下面这样的结果:

$ go version
go version go1.15.13 linux/amd64
1
2

这样,我们已经安装好两个 Go 版本了。这之后,我们如果要在 Go 1.16.5 和 Go 1.15.13 两个版本之间切换,只需要重新设置 PATH 环境变量并生效即可。

不过,你可能依然会觉得通过重新设置 PATH 环境变量的方法有些麻烦。没关系,Go 官方也提供了一种在系统中安装多个 Go 版本的方法,下面我们就来看一下第二种方法。

方法二:go get 命令

这种方法有一个前提,那就是当前系统中已经通过标准方法安装过某个版本的 Go 了。

我们还以 Linux 环境为例,假设目前环境中已经存在了采用标准方法安装的 Go 1.16.5 版本,我们接下来想再安装一个 Go 1.15.13 版本。按照 Go 官方方法,我们可以这样来做:

首先,将 $HOME/go/bin 加入到 PATH 环境变量中并生效,即便这个目录当前不存在也没关系:

export PATH=$PATH:/usr/local/go/bin:~/go/bin
1

然后,我们要执行下面这个命令安装 Go 1.15.13 版本的下载器:

$ go get golang.org/dl/go1.15.13
1

这个命令会将名为 Go 1.15.13 的可执行文件安装到 $HOME/go/bin 这个目录下,它是 Go 1.15.13 版本的专用下载器,下面我们再来执行 Go 1.15.13 的下载安装命令:

$ go1.15.13 version
go version go1.15.13 linux/amd64
1
2

同样的,我们也可以通过下面这个命令查看特定 Go 版本的安装位置:

$ go1.15.13 env GOROOT
/root/sdk/go1.15.13
1
2

方法三:go get 命令安装非稳定版本

其实,除了 Go 团队正式发布的稳定版本 (stable version),像前面安装的 Go 1.16.5 或 Go 1.15.13,我们还可以通过 go get 的方法安装 Go 团队正在开发的非稳定版本 (Unstable Version),包括每个稳定版发布前的 beta 版本或当前最新的 tip 版本,这些非稳定版本可以让 Go 开发人员提前体验到即将加入到稳定版本中的新特性。

但是,通过 go get 安装不同 Go 版本的方法在中国大陆地区会因网络问题而失败。如果你已经克服了网络问题,那安装非稳定版本的步骤其实和上面的步骤一样。现在,我们以 Go 1.17beta1 和 Go Tip 版本为例,带你体验一下它们的安装步骤和验证方法。

首先我们来看 Go 1.17beta1:

$ go get golang.org/dl/go1.17beta1
$ go1.17beta1 download
Downloaded   0.0% (     3272 / 134470397 bytes) ...
Downloaded  21.4% ( 28819248 / 134470397 bytes) ...
Downloaded  58.1% ( 78069168 / 134470397 bytes) ...
Downloaded 100.0% (134470397 / 134470397 bytes)
Unpacking /root/sdk/go1.17beta1/go1.17beta1.linux-amd64.tar.gz ...
Success. You may now run 'go1.17beta1'
$ go1.17beta1 version
go version go1.17beta1 linux/amd64
1
2
3
4
5
6
7
8
9
10

接着来看 Go Tip 版本:

$ go get golang.org/dl/gotip
$ gotip download
1
2

go get 为我们安装 tip 版本提供了极大方便,要知道在以前,如果我们要安装 tip 版本,需要手工下载 Go 源码并自行编译。但你要注意的是:不是每次 gotip 安装都会成功,因为这毕竟是正在积极开发的版本,一次代码的提交就可能会导致 gotip 版本构建失败!

安装好 Go 之后,我们就该讲讲怎么配置了。

# 配置 Go

其实 Go 在安装后是开箱即用的,这也意味着我们在使用 Go 之前无需做任何配置。但为了更好地了解和学习 Go,我们还是要认识一些 Go 自带的常用配置项。Go 的配置项是以环境变量的形式存在的,我们可以通过下面这个命令查看 Go 的这些配置项:

$ go env
1

配置环境变量

# Method.01
export GO111MODULE=on
export GOPROXY=https://goproxy.cn


# Method.02
echo "export GO111MODULE=on" >> ~/.profile
echo "export GOPROXY=https://goproxy.cn" >> ~/.profile
source ~/.profile


# Method.03
nvim ~/.zshrc
---
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
export GOROOT=/Users/shizc/opt/local/go/1.17.2
export PATH=$PATH:$GOROOT/bin
---
source ~/.zshrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

常用配置项

  • GOPATH
    • 项目结构
      • src 存放源代码
      • pkg 存放依赖包
      • bin 存放可执行文件
    • 配置要求
      • go_version < 1.8,必须设置这个环境变量;
      • go_version >= 1.8,如果没有设置,则使用默认值。
    • 默认变量
      • Unix 默认为 $HOME/go
      • Windows 默认为 %USERPROFILE%/go
      • macOS 可以通过修改 ~/.bash_profile 来设置
ba6990

如果你还要了解更多关于 Go 配置项的说明,你可以通过 go help environment 命令查看。