声明
这篇文章介绍的是如何在Ubuntu 18.04 LTS下安装1.5及更高版本go语言编译环境的方法。由于1.5及更高版本的go语言编译器需要依赖go1.4版本,所以我们需要在安装1.4版本后,再安装更高版本。
¶前期准备
¶安装必要的工具
在命令行中输入
| 1 | sudo apt-get install bison ed gawk gcc libc6-dev make | 
¶下载go语言封装包
前往https://golang.org/dl/,分别下载1.4版本及更高版本的封装包。这里以go1.12.7为例。注意,我们是在Linux Ubuntu系统下安装go的,因此下载的封装包,文件名应该是go1.xx.xx.linux-amd64.tar.gz。
除了从网页上下载,你也可以用wget命令在终端直接下载:
| 1 | wget https://dl.google.com/go/go1.4.linux-amd64.tar.gz | 
| 1 | wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz | 
¶设置环境变量
修改/etc/profile文件:
| 1 | sudo vim /etc/profile | 
在结尾处添加
| 1 | + export GOROOT=$HOME/go | 
修改完之后,执行下面的命令使配置文件生效
| 1 | source /etc/profile | 
注意
- 
Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。使用修改 /etc/profile文件进行环境变量的编辑,是对所有用户有用。如果你修改的环境变量,只想对当前用户生效,那就对~/.bashrc文件进行环境变量的编辑,只对当前用户有用。
- 
不会使用vim的话,可以把命令行中的 vim修改成gedit。不过还是推荐用vim,这边涉及到的操作是:按Insert进入插入模式,在文件结尾添加上面提到的三行代码。然后按Esc退回到命令行模式,按:进入Last line mode,输入wq保存并退出就行啦。
- 
$HOME是linux系统中预设好的环境变量,指向~所在的文件目录,如果你不知道在你系统中$HOME具体是哪里的话,可以在命令行中输入echo $HOME查看:1 
 2swayye@swayye-ThinkPad-T470p:~$ echo $HOME 
 /home/swayye
- 
在修改的 /etc/profile中的最后一行,也就是GOPATH那一行代码,你可以自己指定文件目录,记得修改完/etc/profile之后,要自己去那个目录创建对应文件夹,以我为例:1 mkdir /home/swayye/go_program 
¶安装go1.4
cd到下载go1.4.linux-amd64.tar.gz的目录,解压压缩包:
| 1 | tar -zxvf go1.4.linux-amd64.tar.gz | 
解压完成后,会在当前目录生成名为go的文件夹,将文件夹移到/home/xxx,xxx为计算机名,并将文件名改为go1.4。
| 1 | mv go /home/xxx/go1.4 | 
安装go1.4编译器
| 1 | cd go1.4/src | 
上文提到过,安装1.4以上的go编译器需要依赖1.4版本,这个在编译器领域叫bootstrapping,中文翻译叫自举或自展,通俗地讲“用要编译的目标语言编写其编译器。
Go 1.5开始编译器和运行时用go自身编写,all.bash 编译脚本会在$GOROOT_BOOTSTRAP环境变量中查找一个已经存在的go tool chain,实际上就是要有一个编译好的bin/go程序。这里我们运行好1.4版本的./make.bash后,会在/home/xxx/go1.4/bin生成一个二进制文件,现在我们把它添加为$GOROOT_BOOTSTRAP环境变量:
| 1 | export GOROOT_BOOTSTRAP=/home/swayye/go1.4 | 
这样我们就可以编写更高版本的go编译器了
¶安装go1.12.7
同样地,解压1.12.7
| 1 | tar -zxvf go1.4.linux-amd64.tar.gz | 
将解压出来的go文件夹移到/home/xxx
| 1 | mv go /home/swayye | 
安装1.12.7
| 1 | cd /home/swayye/go/src | 
在完成安装后输入go env,如显示以下内容,说明成功了
| 1 | swayye@swayye-ThinkPad-T470p:~$ go env | 
你还可以测试一个简单的代码:
| 1 | package main | 
运行代码:
| 1 | go run hello.go | 
输出Hello world,说明就没有什么问题了。