源代码安装go语言

最近有心想要研究GoProxy的源码,由于是go语言写的,之前没接触过,那么就从如何安装go语言开始介绍吧。

我的系统环境是MacOS 10.10.4,在Mac上一共有三种安装go语言的方法。

Homebrew安装

第一种最简单的安装方法是用homebrew

1
brew update && brew install go

当你的homebrew版本较低的情况下,其go语言的安装版本也会较低,建议升级一下后再安装。

pkg安装

第二种安装方式前提要能翻墙,当然你也可以搜搜看有没有好心人下载好了之后,放在云盘里提供下载。前往go语言官网,下载最新的版本go.10.1.darwin-amd64.pkg安装包后进行安装。

源代码安装

第三种就是今天的主角,源代码安装。前面两种安装方式适合初学者,源代码安装稍显复杂,为什么比起简单的安装方式,我们还要学习较为复杂的安装方法呢?原因很简单,因为goproxy对golang的周边库做过了修改,所以必须从golang工具链开始编译。换个说法就是goproxy是特殊版本的go,需要从源代码安装。

先来介绍一下go的版本。go1.4是一个特殊的版本,它是最后一个用C编写的工具链,go1.5及1.5以后的版本彻底移除C代码,运行时、编译器、链接器都要依赖于go1.4,实现了自举。所以如果需要安装最新版本的go语言,目前是1.10,那么你首先需要安装go1.4,然后再升级到go1.10。

安装go1.4.3

由于go1.4是C语言编写的,所以编译需要gcc。确保你的电脑已经安装了gcc套件。

1
2
3
4
5
6
7
cd ~
# 下载go1.4.3源代码
curl -k https://storage.googleapis.com/golang/go1.4.3.darwin-amd64.tar.gz | tar xz
# 进入src目录
cd go/src/
# 编译
./all.bash

整个的过程可能会报timeout的错误,一开始我也在纠结这个问题,但是后来发现没影响,编译已经成功了,只是在测试的时候报错了,忽略它。

接下来需要将编译好的go二进制文件添加到环境变量中去,假设刚才go的安装目录是在用户的Home目录

1
2
3
4
# 修改profile文件,添加环境变量
vim ~/.bash_profile
# 在最后添加一行
export PATH=/home/username/go/bin:$PATH

注:profile文件中指定的环境变量是全局的。

重启终端,执行一下go version,就能看到go的版本信息了。

升级go1.10.1

go 1.5以上的版本在编译时会在$GOROOT_BOOTSTRAP环境变量中查找一个已经存在的go工具链,如果找不到则会报错。我们安装go1.4.3就是为了生成这个go工具链,所以要告诉系统$GOROOT_BOOTSTRAP的路径。

1
export GOROOT_BOOTSTRAP=/home/username/go

注:终端中输入export命令,指定的环境变量没有全局性,只会在当前终端生效。

通过告诉系统$GOROOT_BOOTSTRAP的路径后,接下来就可以下载1.10.1的源代码并编译了。

1
2
3
4
5
6
7
8
9
cd ~
# 下载go1.10.1源代码
curl -k https://storage.googleapis.com/golang/go1.10.1.darwin-amd64.tar.gz | tar xz
# 已经有go目录,解压后目录自动命名为go-1,再将go-1重命名成go.10.1
mv go-1 go1.10.1
# 进入src目录
cd go1.10.1/src/
# 编译
./all.bash

其实步骤和上面差不多,只是下载了不同的版本,并且重命名了一下安装目录。整个过程可能还是会报错,比方说安装目录需要一个VERSION文件,创建一个就是了,其它只要编译通过就行了。

最后环境变量重新指定一下编译好的go二进制文件即可。

1
2
3
4
# 修改profile文件,添加环境变量
vim ~/.bash_profile
# 在最后添加一行
export PATH=/home/username/go1.10.1/bin:$PATH

重启终端,执行一下go version,验证一下是否为版本。

总结

本文介绍了如何从源代码安装go语言,整个安装过程可能会有这个那个错误,但只要编译能通过就行。确保修改了环境变量$PATH是至关重要的一步,并且go1.5以后的版本全都需要先安装go1.4,然后再升级。别忘了在安装go1.4以后,需要指定环境变量$GOROOT_BOOTSTRAP为go1.4的安装目录,好让要升级的版本知道引导程序在哪儿。在最后升级完成之后,别忘了修改新的环境变量$PATH。下一篇我们会讲述,如何编译GoProxy。

avatar

chilihotpot

You Are The JavaScript In My HTML