go的源码安装非常简单,只需运行源码包中src/all.bash,等到出现 ALL TESTS PASSED 字样就安装好了,但是在源码安装1.5版本以上的go时会报 ERROR: Cannot find /root/go1.4/bin/go 这个错误,这是由于go 1.5版以后的编译安装需要1.4版本go,所以如果想要通过源码方式安装高版本go,必须先安装好1.4版本的go。
先clone go仓库(https://github.com/golang/go.git),然后checkout 到 1.4 分支,并安装该版本
[root@localhost software]# git clone https://github.com/golang/go.git
Cloning into 'go'...
remote: Counting objects: 322777, done.
remote: Compressing objects: 100% (73/73), done.
remote: Total 322777 (delta 32), reused 54 (delta 28), pack-reused 322675
Receiving objects: 100% (322777/322777), 147.71 MiB | 3.49 MiB/s, done.
Resolving deltas: 100% (255582/255582), done.
[root@localhost software]# cd go
[root@localhost go]# git branch
* master
[root@localhost go]# git checkout release-branch.go1.4
Branch release-branch.go1.4 set up to track remote branch release-branch.go1.4 from origin.
Switched to a new branch 'release-branch.go1.4'
[root@localhost go]# git branch
master
* release-branch.go1.4
运行 src/all.bash 安装脚本,稍等片刻即可安装成功:
[root@localhost go]# cd src/
[root@localhost src]# ls
all.bash archive clean.bash compress debug flag html io log make.rc net race.bat run.bat strconv syscall unicode
all.bat bufio clean.bat container encoding fmt image lib9 make.bash math os reflect run.rc strings testing unsafe
all.rc builtin clean.rc crypto errors go index libbio make.bat mime path regexp runtime sudo.bash text
androidtest.bash bytes cmd database expvar hash internal liblink Make.dist nacltest.bash race.bash run.bash sort sync time
[root@localhost src]# ./all.bash
# Building C bootstrap tool.
cmd/dist
# Building compilers and Go bootstrap tool for host, linux/amd64.
lib9
libbio
liblink
cmd/cc
cmd/gc
cmd/6l
....
# Checking API compatibility.
Skipping cmd/api checks
real 0m0.538s
user 0m0.310s
sys 0m0.191s
ALL TESTS PASSED
---
Installed Go for linux/amd64 in /root/software/go
Installed commands in /root/software/go/bin
*** You need to add /root/software/go/bin to your PATH.
把安装好的go项目复制一份到/root/go1.4:
[root@localhost go]# pwd
/root/software/go
[root@localhost go]# cp -R /root/software/go /root/go1.4
[root@localhost go]# ls /root/go1.4/
api AUTHORS bin CONTRIBUTORS doc favicon.ico include lib LICENSE misc PATENTS pkg README robots.txt src test VERSION
[root@localhost go]# /root/go1.4/bin/go version
go version go1.4-bootstrap-20170531 linux/amd64
下载你要安装的go版本源码包(这里是 go1.9.2版),再按之前的步骤安装一遍
[root@localhost software]# curl -SL -o go1.9.2.tar.gz https://github.com/golang/go/archive/go1.9.2.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15.6M 0 15.6M 0 0 1166k 0 --:--:-- 0:00:13 --:--:-- 2802k
[root@localhost software]# ll go1.9.2.tar.gz
-rw-r--r--. 1 root root 16363003 Nov 7 17:39 go1.9.2.tar.gz
[root@localhost software]# tar zxvf go1.9.2.tar.gz
[root@localhost software]# cd go-go1.9.2/
[root@localhost go-go1.9.2]# ls
api AUTHORS CONTRIBUTING.md CONTRIBUTORS doc favicon.ico lib LICENSE misc PATENTS README.md robots.txt src test VERSION
[root@localhost go-go1.9.2]# cd src/
[root@localhost src]# ./all.bash
##### Building Go bootstrap tool.
cmd/dist
##### Building Go toolchain using /root/go1.4.
bootstrap/cmd/internal/dwarf
bootstrap/cmd/internal/objabi
bootstrap/cmd/internal/src
.....
ALL TESTS PASSED
---
Installed Go for linux/amd64 in /root/software/go-go1.9.2
Installed commands in /root/software/go-go1.9.2/bin
*** You need to add /root/software/go-go1.9.2/bin to your PATH.
看到 ALL TESTS PASSED 说明安装成功
设置几个环境变量:
在 /etc/profile 文件中添加以下几行
export GOROOT=/root/software/go-go1.9.2
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
然后执行 source /etc/profile 命令
[root@localhost src]# source /etc/profile
[root@localhost src]# env | grep GO
GOBIN=/root/software/go-go1.9.2/bin
GOROOT=/root/software/go-go1.9.2
[root@localhost src]# echo $PATH
/usr/local/luajit/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/software/go-go1.9.2/bin
[root@localhost src]# go version
go version go1.9.2 linux/amd64
Hello go!
package main
import "fmt"
func main(){
fmt.Println("Hello go!")
}
[root@localhost go]# go run hellogo.go
Hello go!
That's all^^