最近在編譯一些 Golang 的時候被環境設定搞快瘋掉,有次編譯過程還把我一台甲骨文機器搞掛掉
只能手動去甲骨文網站後台強制重開機才恢復,差點吐血。。。
之後在推特上面咆哮了一下,吸引了幾個技術大神空投解決方案,萬事問推友
真是一點都沒說錯~ 😀
— 一阁 (@yegle) April 24, 2020
稍微看一下 GoBinaries 說明書,這玩意真神器,只要一行指令就能直接產出編譯好的 Go 執行檔
什麼 Go 環境、依賴都不用管啦~速度之快,人都還沒反應過來就已經完成了~ 😱
GoBinaries 30 秒快速解決方案
下面以之前介紹過的 MTProxy-Go 為例,有時候作者原始碼已經更新加入新功能,但是 Releases 裡面不見得馬上放出來
這時候想要享受新功能就必須自己抓原始碼下來自己編譯了~
MTProxy-Go 項目的網址是: https://github.com/9seconds/mtg
我們只要拷貝 github.com 網址後面的部分即可,也就是 9seconds/mtg
接著在你想要執行的機器上,使用下面一行指令即可完成執行檔的下載
curl -sf https://gobinaries.com/9seconds/mtg | sh
也可以下載指定的 tag 版本
curl -sf https://gobinaries.com/9seconds/[email protected] | sh
執行時,他會根據你的 CPU 與系統,網路速度不差的話很快就下載下來,並且還幫你安裝到 /usr/local/bin 資料夾裡面
馬上就能開始用了,超方便!
如果你有權限問題,沒辦法寫入 /usr/local/bin 的話,也可以加個 PREFIX 參數把執行檔放到目前目錄下
curl -sf https://gobinaries.com/9seconds/mtg | PREFIX=. sh
完整 Docker 版萬解方案
此方案來自另外一位推友技術大神
docker pull golang:alpine 编译啊 环境都准备好的
— SiuHok (@imsoff) April 24, 2020
底下我們就用 Golang 官方 Docker 容器來快速建立完整 Golang 編譯環境
如果你想要編譯不同 branch 或者自己手動改一些原始碼再編譯的話,此 Docker 方案將是你最佳解
# 先建立一個等下要存執行檔的資料夾
mkdir ~/gobin
# Docker 一行建立一個完整 Golang 環境
docker run -it --rm -v ~/gobin:/go/bin golang:alpine
# 在容器內安裝 git 工具
apk add -u git
# 下載指定項目 branch 原始碼,如果不加 -b 參數,預設通常就是 master
git clone -b stable https://github.com/9seconds/mtg.git src/
# 進入 src 資料夾
cd src
# 指定要編譯的平台,開始編譯、安裝
GOARCH=amd64 GOOS=linux go get -u
# 退出容器
exit
以上操作完畢並退出後,除了編譯好的執行檔已經在外部 ~/gobin 目錄下
Docker 容器裡面的操作都隨著 exit 一起消失、乾淨利落,你的系統還是老樣子,非常適合潔癖的人使用
第 12 行的GOARCH
與 GOOS
可以指定你想要編譯的平台,就算不同系統也可以交叉編譯
例如 GOARCH=amd64 GOOS=windows 也是沒問題的,會直接輸出 .exe 檔案,非常方便!
GOARCH 常見參數有:arm、arm64、386、amd64 等等
GOOS 常見參數有:darwin、freebsd、linux、windows 等等
另外有些項目可能會需要更多套件才能編譯,有些可能要 node.js 或者 npm 之類的
這部分就要自己好好看看作者寫的 Readme 內容了喔~
以上就是本篇文章提供的兩個無需安裝複雜環境就可以拿到編譯好的 Golang 執行檔解決方案
自己動手豐衣足食,舒服了~ 🖖