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