目前(2016),Debian的稳定源只能安装go1.3版本。如果需要最新的版本,只能自行从源码编译安装。
卸载旧版本
sudo apt-get remove golang sudo apt-get autoremove
源码下载
git clone https://github.com/golang/go.git
如果没有Git,必须自行解决;如果没有gcc,也需要自行安装。
此外,golang/go这个库实在太大,近200MB。完整从GitHub上拉下来,非常耗时;在GitHub连接不稳定时,也可能会失败。这属于网络问题,读者也需自行解决。
(adsbygoogle = window.adsbygoogle || []).push({});
按时间顺序,这里记录了一些相关的坑。如果想直接按照正确的步骤完成编译,可以跳到环境配置小节。
首次编译错误
src
$ cd src $ ./all.bash ##### Building Go bootstrap tool. cmd/dist ERROR: Cannot find ~/go1.4/bin/go. Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
我本来就是因为只有Go1.3,才要从源码安装新版本的。现在找我要Go1.4,这可如何是好?
自举
Go从1.5版本开始实现“自举”(Bootstrap),也就是用Go来实现Go、用Go来编译Go。之前都是用C来实现,编译Go项目就是编译C语言。
因此,只要把源码checkout到1.4版本,就可以不需要依赖于Go自身,解决自我依赖悖论。
git checkout go1.4 ./all.bash
二次编译错误:import cycle not allowed
import cycle not allowed package ./cmd/dist imports bytes imports errors imports runtime imports runtime/internal/atomic imports runtime
Go不支持循环导入,不知算进步还是退步。
不过,这里倒是体现了价值,提前报错。这个错误的主要原因,是编译时把GOROOT下的源码与GOROOT_BOOTSTRAP下的搞混了。如果Go与Java一样支持循环导入,那么这里就会进行一次错误的编译。
这个问题大致是路径配置错误导致的。未免误导,这里就不详述复现步骤了。
总之,先配置好GO的环境路径,能解决大多数错误。
环境配置
go1.4$HOME.golang
~/bashrc
export GOROOT=$HOME/.golang/go export GOPATH=$HOME/.golang/path export GOROOT_BOOTSTRAP=$HOME/.golang/go1.4 export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export PATH=*go getgogofmt
gogo1.4
cp -r go go1.4
正确的编译步骤
GOROOT_BOOTSTRAP/srcgit checkout go1.4.3./make.bash./all.bash./all.bash./make.bashGOROOT./make.bash
结束后,可以检查版本。
$ go version go version devel +f8187ce Mon Nov 7 02:55:52 2016 +0000 linux/amd64
咦?怎么版本怪怪的!
这是因为master的HEAD,通常是一个开发中的提交,是最新不稳定版本。
如果想要稳定版怎么办?
和编译1.4.3版本类似,checkout过去再编译。比如,我现在是1.7.3版本。
$ git checkout go1.7.3 ... $ ./make.bash ... $ go version go version go1.7.3 linux/amd64
文/匿蟒(简书作者) 原文链接:http://www.jianshu.com/p/9c1e685bcb5b
优质内容筛选与推荐>>1、2.4 利用FTP服务器下载和上传目录
2、Android---常用方法
3、Linux系统如何查看版本信息
4、[leetcode]Convert Sorted List to Binary Search Tree
5、js call & apply