Go跨平臺編譯的方法學習

從第一天開始學習Golang就知道它有一個很讓人心動的特性就是跨平臺編譯,但一直沒有去使用。最近作了一個小東西須要用到這個特性,因此在網上進行了搜索。html

首先找到是國內文章是利用下載Go的源碼包,將對其進行編譯安裝,完成後Go/src下的make.bash生成跨平臺的編譯器,這樣在每次用時須要指定GOOS及GOARCH來進行編譯,如:linux

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build //編譯爲linux 64位系統下的程序

若是須要編譯windows 64 位下的程序則要再寫一個命令:golang

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build //編譯爲windows 64位系統下的程序

具體介紹請看: 「Golang的跨平臺編譯程序」docker

這種方法針對一次性編譯、測試、學習頗有用,但對於須要對多平臺編譯一次性處理會有一些麻煩shell

  • 首先你須要針對每一個你想要部署的平臺在編譯機上都要運行一次相應的 make.bash來生成所須要編譯器windows

  • 每次都要執行相應的編譯命令(這個有點牽強,由於經過shell也能夠實現批處理)bash

  • 本機須要保留全部生成的編譯器,若是其餘人也須要這樣的環境則須要再執行一次所需編譯器的生成工做app

  • 爲了保持本機乾淨(呵呵)學習

好吧,除了第一個有點像是一個麻煩,其它的都不是問題,主要目的是引出第二種方法,那就是利用docker進行部署編譯:測試

  • 首先你須要安裝docker 

  • 下載go的跨平臺編譯版本,我用的是golang 1.4.2-cross

sudo docker pull golang:1.4.2cross
  • 進入後運行一下 go env肯定一個編譯環境

複製代碼

GOARCH="amd64"GOBIN=""GOCHAR="6"GOEXE=""GOHOSTARCH="amd64"GOHOSTOS="linux"GOOS="linux"GOPATH="/go"GORACE=""GOROOT="/usr/src/go"GOTOOLDIR="/usr/src/go/pkg/tool/linux_amd64"CC="gcc"GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"CXX="g++"CGO_ENABLED="1"

複製代碼

  • 進入root目錄下的bin目錄咱們能看到全部可編譯的平臺,是否是不少:)

複製代碼

root@55140be4a751:/usr/src/go/bin#

複製代碼

  • 運行:docker run --rm -it -v "$PWD":/go/src/myapp -w /go/src/myapp golang:1.4.2-cross bash

  其中:"$PWD",是指將當前目錄掛載爲docker的數據卷

    第一個/go/src/myapp 表示爲當前目錄掛載至數據卷的名稱

    第二個/go/src/myapp 表示爲進行shell後直接進入的工做目錄

  • 在啓動的shell中運行:

docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.3-cross bash 
$ for GOOS in windows linux; do > for GOARCH in386 amd64; do > go build -v -o myapp-$GOOS-$GOARCH //注意這裏的減號間沒有空格 
> done > done

 

   這裏的 GOOS後windows linux指的是編譯爲何平臺,用到那個則輸入那個,運行後輸入出相應的結果:

 main.go  myapp-linux-386  myapp-linux-amd64  myapp-windows-386  myapp-windows-amd64
相關文章
相關標籤/搜索