這是一個建立於
的文章,其中的資訊可能已經有所發展或是發生改變。
golang也就是go語言,現在已經發行到1.4.1版本了,語言特性優越性和背後google強大靠山什麼的就不多說了。golang的官方提供了多個平台上的二進位安裝包,遺憾的是並非沒有發布ARM平台的二進位安裝包。ARM平台沒辦法直接從官網下載二進位安裝包來安裝,好在golang是支援多平台並且開源的語言,因此可以通過直接在ARM平台上編譯原始碼來安裝。整個過程主要包括編譯工具配置、擷取golang原始碼、設定golang編譯環境變數、編譯、配置golang運行環境變數等步驟。
註:本文選用樹莓派做測試,因為樹莓派是基於ARM平台的。
1、編譯工具配置
據說下個版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要配置好C編譯工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安裝,樹莓派的RaspBian系統是基於Debian修改的,所以可以使用這種方法安裝。
1.2 在RedHat或Centos 6平台上可以使用sudo yum install gcc libc-devel命令安裝。
安裝完成後可以輸入 gcc --version命令驗證是否成功安裝。
2、擷取golang原始碼
2.1 直接從官網下載原始碼壓縮包。
golang官網提供golang的原始碼壓縮包,可以直接下載,最新的1.4.1版本原始碼連結:https://storage.googleapis.com/golang/go1.4.1.src.tar.gz
2.2 使用git工具擷取。
golang使用git版本管理工具,也可以使用git擷取golang原始碼。推薦使用這個方法,因為以後可以隨時擷取最新的golang原始碼。
2.2.1 首先確認ARM平台上已經安裝了git工具,可以使用git --version命令確認。一般linux平台都安裝了git,沒有的話可以自行安裝,不同平台的安裝方法可以參考:http://git-scm.com/download/linux
2.2.2 複製遠程golang的git倉庫到本地
在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然後以下命令擷取代碼倉庫:
git clone https://go.googlesource.com/go
大陸地區可能會擷取失敗,在不翻牆的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經將golang也託管到github上面,所以也可以通過下面命令擷取:
git clone https://github.com/golang/go.git
視網路情況,下載可能需要不少時間。我2M的頻寬花了將近兩個小時才下載完,雖然整個項目不過幾十兆= =
下載完成後,可以看到目錄下多了一個go目錄,裡面即為golang的原始碼,在終端上執行cd go命令進入該目錄。
執行下面命令檢出go1.4.1版本的原始碼,因為現在已經有新的代碼提交上去了,最新的代碼可能不是最穩定的:
git checkout go1.4.1
至此,最新1.4.1發行版的原始碼擷取完畢
3、設定golang的編譯環境變數
主要有GOROOT、GOOS、GOARCH、GOARM四個環境變數需要設定,先解釋四個環境變數的意義。
3.1 GOROOT
主要代表golang樹結構目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設定這個環境變數,因為編譯的時候預設會以go目錄下src子目錄中的all.bash指令碼運行時的父目錄作為GOROOT的值。為了保險起見,可以直接設定為go目錄的路徑。
3.2 GOOS和GOARCH
分別代表編譯的目標系統和平台,可選值如下:
| GOOS |
GOARCH |
| darwin |
386 |
| darwin |
amd64 |
| dragonfly |
386 |
| dragonfly |
amd64 |
| freebsd |
386 |
| freebsd |
amd64 |
| freebsd |
arm |
| linux |
386 |
| linux |
amd64 |
| linux |
arm |
| netbsd |
386 |
| netbsd |
amd64 |
| netbsd |
arm |
| openbsd |
386 |
| openbsd |
amd64 |
| plan9 |
386 |
| plan9 |
amd64 |
| solaris |
amd64 |
| windows |
386 |
| windows |
amd64 |
需要注意的是這兩個值代表的是目標系統和平台,而不是編譯原始碼的系統和平台。樹莓派的RaspBian是linux系統,所以這些GOOS設定為linux,GOARCH設定為arm。
3.3 GOARM
表示使用的浮點運算副處理器版本號碼,只對arm平台有用,可選值有5,6,7。如果是在目標平台上編譯原始碼,這個值可以不設定,它會自動判斷需要使用哪一個版本。
總結下來,在樹莓派上設定golang的編譯環境變數,可編輯$HOME/.bashrc檔案,在末尾添加下面內容:
export GOROOT=你的go目錄路徑export GOOS=linuxexport GOARCH=arm
編輯完後儲存,執行source ~/.bashrc命令讓修改生效。
4、編譯原始碼
環境變數配置完成自後就可以開始編譯原始碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個指令碼(另外還有兩個all.bat和make.bat指令碼適用於window平台)。編譯實際上就是執行其中一個指令碼,兩者的區別在於all.bash在編譯完成後還會執行一些測試套件。如果希望只編譯不測試,可以運行make.bash指令碼。使用cd命令進入go下src目錄,執行./all.bash或者./make.bash命令即可開始編譯。由於硬體情況不同,編譯耗費的時間不同。在我的B型樹莓派編譯過程花費了將近半個小時,編譯完成後執行的測試套件又花費了差不多一個小時,總共花費了一個半小時左右。
5、配置golang運行環境變數
編譯完成後,go目錄下會產生bin目錄,裡面就是go的運行指令碼。為了以後使用方法,可以將這個bin路徑添加到PATH環境變數中。同樣編輯~/.bashrc檔案,因為前面設定過GOROOT環境變數指向go目錄了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
儲存後同樣執行source ~/.bashrc命令讓環境變數生效。
至此,golang原始碼編譯安裝成功。執行go version應該就能看到當前golang的版本資訊,表示編譯安裝成功。
另外還有一個比較重要的GOPATH環境變數需要設定,等有時間再講講吧。
參考官方文檔:https://golang.org/doc/install/source