在建構web-server時,我們有各種選擇,PHP,Nodejs,ASP......等等,那麼為何我們要使用go來建構webserver呢?
在前面的章節提到,go的優點其中一項,就是編譯好binary後,可以快速部署到環境上,不像PHP需要先建置Apache,go只要該環境能執行binary,就可以執行部署。
./web-server start -e env.example
以上面所示,只要binary到達指定位置,下一句指令即可部署完成。
如果要放在背景執行則可以改用
nohup ./web-server start -e env.example
使用go的另一個好處,就是在編譯時,會自動幫你檢查是否有錯誤,一般來說,使用VScode,phpstorm或是裝了檢查套件的vim,都有幫你檢查的功能,不過像是沒用到的參數或函數之類的,有時這些ide不會發現,如果就這樣編譯出來,雖然程式不會出錯,但是就會造成資源的浪費,這時go的檢查就可以幫你找出這些部分,並要求你修正,如果沒修正完成,他是不讓你編譯的。
# test/ithome
./main.go:18:6: test declared and not used
如上圖,我宣告一個test變數,但是沒使用它,編譯是不會通過的。
另一項go的特性就是多平台支援,在編譯go的binary時,會在專案目錄下一個指令
go build
這個指令就可以將你的專案編譯成可執行的binary,同時也會順便幫你檢查是否有程式碼的錯誤。
# test/ithome
./main.go:18:2: undefined: newTestJSON
./main.go:19:2: undefined: newTestJSON
./main.go:20:2: undefined: newTestJSON
./main.go:21:32: undefined: newTestJSON
而編譯不同平台的binary 主要是靠go env內有個GOOS的參數來決定,通常預設會是本機的OS
以我使用mac,GOOS就會是darwin,如果要改成build linux版本,只要改變GOOS的參數
export GOOS=linux
再下go build,這樣就可以編譯出別種平台的binary了,以此方式,就可以快速地部署在各種平台上,就不用再去調教該平台的環境。