Go跨平台編譯的方法學習

來源:互聯網
上載者:User

標籤:

從第一天開始學習Golang就知道它有一個很讓人心動的特性就是跨平台編譯,但一直沒有去使用。最近做了一個小東西需要用到這個特性,所以在網上進行了搜尋。

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

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

如果需要編譯windows 64 位元下的程式則要再寫一個命令:

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

具體介紹請看: “Golang的跨平台編譯器”

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

  • 首先你需要針對每個你想要部署的平台在編譯機上都要運行一次相應的 make.bash來產生所需要編譯器
  • 每次都要執行相應的編譯命令(這個有點牽強,因為通過shell也可以實現批處理)
  • 本機需要保留所有產生的編譯器,如果其他人也需要這樣的環境則需要再執行一次所需編譯器的產生工作
  • 為了保持本機乾淨(呵呵)

好吧,除了第一個有點像是一個麻煩,其它的都不是問題,主要目的是引出第二種方法,那就是利用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目錄我們能看到所有可編譯的平台,是不是很多:)
[email protected]:/usr/src/go/bin# lsdarwin_386    dragonfly_386    
freebsd_386 freebsd_arm gofmt
linux_arm nacl_amd64p32 netbsd_386 netbsd_arm
openbsd_amd64 plan9_amd64 windows_386darwin_amd64 dragonfly_amd64 freebsd_amd64 go
linux_386 nacl_386
nacl_arm netbsd_amd64 openbsd_386
plan9_386 solaris_amd64 windows_amd64
  • 運行: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

 

Go跨平台編譯的方法學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.