你應該學 Go 的五個理由
開發速度快
沒有java那么復雜的定義類、子類、各種 get 、set 方法。go 里面幾乎沒有多余的代碼,很少的代碼就可以完成很復雜的功能。Rust 則是各種編譯報錯,對于初學者非常不友好。Go里面各種接口的抽象非常簡潔,尤其是網絡包的抽象。你可以感覺到你編寫的代碼和Go庫函數的代碼高度一致,這點很少有語言能做到。
如果你還不相信,下面main里面的三行代碼就可以啟動一個文件服務器。你還有什么理由不用Go。
- func main() {
- router := httprouter.New()
- router.NotFound = http.FileServer(http.Dir("data"))
- _ = http.ListenAndServe(":80", router)
- }
靜態編譯
能夠跨平臺靜態編譯,在mac 上開發,然后編譯出linux 二進制。這極大地提高了開發效率。關鍵是編譯后的二進制也非常小,之前網上有測評,相同的一個函數 Go 編譯完是3M ,而C# 則需要40M。
沒有JVM,速度快
沒有java的虛擬機的依賴,讓部署變得更加簡單。而且Go 比Python 速度要快。
Go routines
沒有哪門語言的并發能夠像Go 一樣簡單,一個關鍵字 go 就可以啟動一個協程。rust 里面的異步多線程 + 生命周期管理 能干翻一波程序猿。java 里面則是玩各種線程池,實現runnable接口或者集成Thread 類,都比較復雜。
云原生語言
云原生這個詞已經火到不行了,云原生將會徹底改變軟件的開發和交付方式。而云原生大部分項目都是采用Go語言,比如docker、k8s、harbor等,可以想象,Go開發者的待遇不會差!
吐槽
但寫了多年的Go,最讓我感覺Go設計得不太好的地方就是錯誤處理
隨處可見下面的錯誤處理,造成大量的代碼冗余,個人更加喜歡 Java 的try catch。
- if err != nil {
- return val, err
- }