Golang1.14的源码安装和升级
go1.4之前是由c++编译,而从1.5开始则是用go语言自身编译。
因此1.4以前的源码编译安装需要gcc,而1.5及以后的版本基本都需要先安装一个go1.4来编译源码,此处以go 1.14.2为例
其他版本应该是大同小异的。
网上教程其实很多,不过我自己看着有点累,他们有不少多余且复杂的操作,以至于我看不懂而不敢去盲目复现。
最后还是结合了官网上的源码安装教程搞定了官网教程
其实思路非常简单:1.配置编译器环境变量。2.运行脚本。3.将go加入环境变量
一、下载
-
下载go1.14.2.src.tar.gz或者其他稳定版。src代表源码
-
mac或者Linux 下载go1.4 bootstrap
-
windows 下载go1.4.2 windows64位安装包
二、安装go-1.4-bootstrap
-
首先解压go1.4-bootstrap-20171003.tar.gz
我就解压到自己的下载目录了,并重命名叫做go1.4,最终路径如下
# 注意自己的路径和重命名 /Users/jakuxa/Download/go1.4
-
配置环境变量,将go1.4注册到环境中,接下来要用它作为编译工具
- mac或Linux系统
# 打开mac系统环境变量配置文件 $ vim ~/.bash_profile # 在任意地方添加两行环境变量 > export GOROOT_BOOTSTRAP=/Users/jakuxa/Download/go1.4 > export CGO_ENABLED=0 # 刷新生效 $ source ~/.bash_profile # 进入go1.4/src目录下,运行make.bash $ cd /Users/jakuxa/Download/go1.4/src $ sh make.bash
- windows系统
windows这里,我们采用的是用最简单的办法安装go 1.4版本
用msi安装包的方式完成go1.4安装后,再按照下面mac和linux系统下的方式用go1.4去编译安装go1.14的源码,注意下windows下环境变量等的设置方法(右键计算机——属性——高级系统设置——环境变量)和Linux不同就好了
其实这么做有一丢丢蠢,因为用.msi安装包的方式去安装go1.4再安装go1.14,这与大家执着于源码安装golang而点进这篇博客的初衷背道而驰。
理论上在windows使用go1.4 bootstrap去安装go1.14也完全行得通。但我在实际操作中却困难重重,从gcc安装到bootstrap安装到新版本go安装,每一步都错误百出。因此就不太推荐了。
(推荐动手能力强的,明白go源码安装思路的可以尝试一下)
windows下的gcc安装参考# ctrl+R cmd打开命令行 > gcc -v # 有版本号信息说明已经装了gcc,没有则需要安装 # 剩余步骤windows的步骤和mac基本一致,请参考mac去做吧,记得运行cmd时要以管理员身份打开 # 另外唯一的区别mac中运行的.bash文件,windows下对应去运行.bat后缀的文件,如make.bat和all.bat
确保有gcc后,windows添加环境变量
右键 此电脑 -> 属性 -> 高级系统设置 -> 环境变量 ->系统变量 新建
变量名: CGO_ENABLED
变量值: 0
变量名: GOROOT_BOOTSTRAP
变量值: /Users/jakuxa/Download/go1.4
#注意改成windows下的路径,这里我就用这个指代了
三、安装go1.14
-
解压go1.14.2.src.tar.gz
最终路径如下
# 注意自己的路径 /Users/jakuxa/go
-
安装并配置
- mac系统
$ cd /Users/jakuxa/go/src $ sh all.bash # 打开mac系统环境变量配置文件 $ vim ~/.bash_profile # 这是golang源码路径,以后安装第三放包都在这里 > export GOPATH=/Users/jakuxa/项目/golang # go路径 > export GOROOT=/Users/jakuxa/go/ # 修改之前的GOROOT_BOOTSTRAP > export GOROOT_BOOTSTRAP=/Users/jakuxa/go/ # 加入到path中 > export PATH=$PATH:$GOROOT/bin # 刷新生效 $ source ~/.bash_profile # 检查安装是否成功 $ go version
- windows系统
> cd /Users/jakuxa/go/src > all.bat
添加环境变量到path
还记得当初JAVA_HOME怎么配的吗,xD
> go version
四、go的升级
-
下载新版源码包,假设为go1.15.1.src.tar.gz,并假设我把他解压到我的下载文件夹:
# 新版go源码文件解压在哪无所谓,只要先别覆盖老版本就可以 /Users/jakuxa/Download/go
-
用go1.14编译安装
仍然是编译源码,实际上就是覆盖安装,但不需要再用go1.4了
go可以用老版本编译新版本,所以等1.14安装好后,就可以编译1.15或者以上版本
# 到新版的src目录下执行相同操作 $ cd /Users/jakuxa/Download/go/src $ sh all.bash
-
黏贴覆盖老版本go
# 可以鼠标操作去复制黏贴,不一定非要用命令 # /Users/jakuxa/go就是我们原先使用的老版本的go,如此完成覆盖更新 $ mv /Users/jakuxa/Download/go /Users/jakuxa/go # 如果go根目录也改变了,则需要去.bash_profile中修改GOPATH坏境变量 # 如果打算安装两个版本,则不要覆盖老版本,并通过修改GOPATH在新老版本间切换