小技巧!Mac 環境下編譯 Go 服務

背景

本篇分享來源於上午和同事的討論。大部分工程師都使用 Mac 做爲開發環境,平常 local 編譯 go 代碼沒什麼問題,偶爾需要 linux binary, 交叉編譯足夠了

GOOS=linux GOARCH=amd64 go build main.go

比如上面指定 GOOS 是 linux, GOARCH 平臺是 amd64. 但還是有些場景,Mac 無法解決

  1. 使用 CGO 的代碼

  2. 想使用 gdb 去調試

第二個場景 gdb 我還折騰過一段時間,始終無法像 linux 平臺那樣完美。以前很蠢的,總是將代碼 clone 到 linux 開發機上。難道無法解決了嘛?

Docker

解決辦法就是:Docker 啓動 ubuntu 虛擬機,然後掛載本地 GOPATH 目錄到容器中

讓我們來看下操作細節:

安裝 docker for mac 可以自行 google, 這裏要注意調大 cpu 和 memory, 否則編譯大型代碼時內存不足。

~$ docker pull ubuntu
~$ docker create -ti --cpus 6 -m 6GB --privileged --name sextant -v /Users/zerun.dong/:/root/zerun.dong ubuntu bash -l
~$ docker start -ai sextant

上面命令分別是下載 ubuntu 鏡像,創建名爲 sextant 的容器,最後再啓動

這裏面 -cpus -m 用來設置資源,少了不夠用。/Users/zerun.dong/:/root/zerun.dong 用於將本機目錄掛載到容器中的 /root/zerun.dong 下面,privileged 允許容器對宿機主 root 權限

進到容器後,需要再安裝 go binary, 然後設置好 GOPATH, PATH, GOROOT 後即可進行編譯

成功後就會在 Mac 本機留下 linux binary, 也可直接在容器中用 gdb 進行調試,非常方便

~$ docker ps -a | grep -i ubuntu
~$ docker commit d497d0fee14d ubuntu:go

當然建議使用 docker commit 保存剛纔的容器運行時,這樣下次就可以直接使用 ubuntu:go 鏡像,然後編譯,省去剛纔的操作步驟

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/XQ2D5OpxkUSH2V_MR3Htmg