go編譯與部署

go在編譯和部署方面相比於Java更有優勢,首先編譯速度極快,支援交叉編譯,並且執行編譯後的二進位制檔案時並不需要go的環境,只需要編譯成指定執行平臺的二進位制檔案就可以了。

go是支援交叉編譯的,也就是說在Windows平臺可以編譯成Windows上、Linux上、Mac上等可以執行的可執行程式。

首先可以在控制檯透過go env檢視當前go相關的環境變數,注意兩個變數GOOS和GOARCH:

GOOS:目標平臺的作業系統(darwin、freebsd、linux、netbsd、openbsd、windows)

GOARCH:目標平臺的體系架構(386、amd64、arm、mips、mips64、mips64le、mipsle)

將這兩個變數設定成目標平臺的對應值。

然後在目標專案的根目錄,就是main函式所在目錄的控制檯中執行go build編譯,也可指定主類檔案和編譯生成的檔名,在該目錄中就會生成編譯後的可執行程式的檔案了,不過如果有配置檔案,比如conf。init這種,是不會編譯進去的,只編譯go相關的,所以執行程式時需要把配置檔案和可執行程式放在一起執行。

在Mac下編譯Linux和Windows 64位可執行程式:

# Linux

GOOS=Linux

GOARCH=amd64

go build -i -o hello hello。go

#Windows

GOOS=windows

GOARCH=amd64

go build -i -o hello hello。go

在linux下編譯Mac和Windows 64位可執行程式:

# Darwin (Mac OS)

GOOS=darwin

GOARCH=amd64

go build -i -o hello hello。go

# Windows

GOOS=windows

GOARCH=amd64

go build -i -o hello hello。go

在Windows下編譯Mac和Windows 64位可執行程式:

# Darwin (Mac OS)

SETGOOS=darwin

SETGOARCH=amd64

go build -i -o hello hello。go

#Liunx

SETGOOS=linux

SET GOARCH=amd64

go build -i -o hello hello。go

編譯完成了,接下來可以將可執行程式放到目標平臺上執行了,這裡用Linux平臺作為目標平臺,編譯前注意看下目標Linux平臺時多少位的作業系統,編譯成指定位的,少走一步坑。比如現在生成的可執行程式是hello。

將可執行程式hello和配置檔案(如果有的話)放到目標平臺的指定目錄下。

修改可執行程式hello的許可權

chmod 755 hello。

最簡單的執行方式。/hello,但是這樣的問題是如果我們ctrl+c退出了程序,這個程序也就死掉了,所以我們需要讓程序一直在後臺執行,使用nohup 。/hello &,關於nohup指令回頭再總結,最簡單的方式實現了程序在後臺執行。

這裡還有兩個小坑,一個是hello程序起不來,埠被其他程序佔用了,比如8899埠,lsof -i:8899檢視端口占用情況,進一步透過netstat -nap | grep 佔用埠PID檢視進行情況。

程序起來後,客戶端訪問不了,日誌也沒有反應,比較大的可能是防火牆的問題,iptables -L -n看下開放的埠情況,沒開埠開一下。

這裡只是最簡單的部署到Linux上,更多的部署到Google App Engine、阿里雲、騰訊雲、Docker都有各自的部署方式,先不展開了。