Go語言作為后起之秀,在語言層面具有語法簡潔、執行效率高的特點;相比之下,Java和Python、PHP都顯得低效,C++則太過麻煩,而Go則可以做到簡單與高效兼顧。
Go語言是主打並發、為並發而生的,其出發點即是瞄准大數據+雲計算時代背景下的高並發、分布式應用場景。
可以在不同平台直接編譯生成可執行程序,基礎內存占用很少,小應用占用幾M大型應用占用個幾十M就能很好運行,這使得golang可以在樹莓派之類的小設備上很好的運行,這一點表現比java要好的多。
Go 語言為 SRE 帶來的好處
簡單地說就是:簡單、可靠、快速。
使用 Go 語言——無論你在構建什么,專注於手頭的工作,不要操心那些工具。
簡單
可讀性:Go 語言代碼具有很高的可讀性,即使有多個運維團隊共享代碼庫,這些代碼也很容易讀懂,因為它們不管在哪里看起來都是一樣的。可以使用 gofmt(內置的 linter)讓代碼變得更容易閱讀。
內置了測試、分析和基准工具:為了遵循 Go 語言的最佳實踐,你可能會進行 TDD(測試驅動開發)。你不一定需要使用斷言,但如果你想要用它,隨時都可以使用。測試、分析(CPU 和內存)和基准工具都是內置的,因此不需要學習新語言、新命令或使用新工具,並且還有一些很好的工具可用於可視化測試結果。
一個二進制文件搞定一切:Go 語言使用了靜態鏈接,也就是說它不需要依賴外部庫,不需要復制依賴項或操心導入問題。所有代碼及其依賴項都在二進制文件中。而且,作為一個純粹的同質環境,它不依賴語言版本和發布版本。
交叉編譯:將所有東西塞進二進制文件中讓事情變得簡單了,而能夠對其進行交叉編譯則讓事情變得更加簡單:為了支持在不同的操作系統上運行二進制文件,只需要設置 2 個環境變量:GOOS和GOARCH。不需要虛擬環境、包管理器或管理依賴項。這是 CLI 提供的一項很棒的功能,實際上,一些流行的工具也在使用它,如 etcdctl、kubectl 和 docker。
組合,而不是繼承:避免繼承造成的混淆。
標准庫:標准庫中的很多軟件包都是 Ops 工具(比如處理基於不同的協議——如 HTTP/HTTP2——的 Web 服務,以及文件處理:路徑、下載、打開、進程、時間、json、正則表達式等)的構建塊。不需要跟蹤用於基本操作的標准包或外部軟件,或者在這些包被棄用后切換到其他包。因為這些都在標准庫中——它們得到了良好的維護,提供了良好的文檔。雖然標准庫不大,但對於 OPS/SRE 工程師來說已經很好用了。
可靠
有指針,但沒有指針算術:保持安全!
錯誤處理:明確規划錯誤,並將其作為值來對待,而不是拋出錯誤異常,從而讓代碼執行更加順暢。
開源:Go 語言背后有一個強大的社區在提供支持,包括多年來使用 Go 語言的公司以及谷歌、微軟、蘋果等行業巨頭(你知道 SpaceX 正在使用 Go 語言嗎?)。
數據類型:Go 語言是類型安全和強類型的語言,這意味着對 int 進行字符串操作是不允許的,因為這樣無法通過編譯。基於數組類型構建的內存高效抽象的額外好處是讓一些操作明顯變快了。
快速
快速編譯和執行:如果有未使用的導入,編譯器將運行失敗。編譯時間很短,得到的二進制文件很小。由於代碼被編譯為機器碼,所以執行速度很快。想想通過 sed 或 bash 循環運行數百萬個輸入,如果使用 Go 語言會有多快?
垃圾回收:與很多其他語言一樣,Go 語言中的垃圾回收也是一個爭議性話題。簡單地說就是出於性能優化的目的會對默認值做出修改。
導入定義好的依賴項:所有依賴項都包含在二進制文件中,這樣可以省掉協調二進制文件和依賴項的額外步驟。
學完后整體感覺不錯,收獲還挺多,如果有需要資源的伙伴,可以私信我~