開源go-zero作者描述自己從Java到Go語言經歷 - Reddit

banq發表於2022-03-21

我寫程式碼已經超過20年了。在使用Go之前,我使用過很多程式語言,包括C、C++、C#、Java。2013年初,我決定學習Go。

我花了一天時間來閱讀Go的語法和關鍵詞,又花了幾天時間來閱讀官方文件和部落格。強烈推薦Effective Go 。之後,我開始寫一個小的爬蟲專案,發現寫Go程式碼非常舒服。

然後我開始用Go重寫我們的生產服務,這些服務是用Java和PHP寫的。而在2015年,我們所有的生產服務都採用了Go語言。我們有3000多萬使用者,日活躍使用者超過300萬。與Java和PHP相比,我們節省了大約50%的伺服器/雲端計算成本。

2018年,我加入了另一家公司,超過5000萬使用者,約700萬日活躍使用者。由於大量的服務停機,我決定用Go和我的框架重寫服務。我們花了大約5個月的時間,我們得到了比99.99%更好的正常執行時間。此外,我們還開發了一些開發工具,幫助我們提高了工作效率。

所有的框架和工具將在2020年下半年在GitHub上開源。到目前為止,大量的使用者和反饋幫助我們改善了很多。在1年半的時間裡,有15.6萬顆星星和2.2萬個分叉。

https://github.com/zeromicro/go-zero

去年,我在github上做了~2k貢獻。我還開放了其他一些專案的原始碼,所有這些努力對我的技術能力和工作機會都有很大幫助。
  
其他Reddit網友:
為什麼我決定從 Java 轉移到 Go 是出於以下考慮:
  1. 我們現有的所有程式碼都是用 Java 編寫的,沒有人知道它是如何組織的。當伺服器掛起時,每個人都告訴重新啟動,大多數問題都沒有根本原因。
  2. 我決定重寫整個系統,並改用另一種程式語言,以避免從以前的程式碼庫中複製/貼上。
  3. 我們有數千萬使用者,伺服器成本是 Java 的一個非常重要的問題。

以及其他一些次要的考慮。

回覆:我不得不懷疑這其中有多少是由於缺乏對JVM的瞭解,缺乏適當的調整,缺乏可觀察性,等等。

當然,我認為也有Java的錯,由於容器化,這一代人更喜歡更簡單的執行時,不斷地移動(Nodejs,Python,Go coroutines)。

另外,這個故事有多少是公司(或你)"重寫了整個系統 "的事實,所以當然現在對你來說更容易理解。下一個人也會是這樣嗎?Go的生態系統、堆疊痕跡、剖析工具,僅僅是由於年代久遠,還沒有達到Java的水平。
 
我在 Go 中的工作效率比在 Java 中要高得多。
我認為不同的人使用不同的語言很好。在 Java 世界工作了 20 年後,我非常確信 Java 中的大多數“最佳實踐”與維護和生產力是對立的。但是不可能衡量開發人員的生產力,所以這只是一個基於意見的陳述。
我認為說 Java 是 go 的對立面很有用。我個人的感覺是,Go 程式傾向於只解決手頭的問題,並讓你的架構不斷髮展以適應需求。Java,一直到 getter 和 setter 的普遍使用,都是關於通過過度工程來解決明天的問題。
  
Go 無疑是對 90/00 年代物件導向的膨脹和複雜性的回應,也是對過程化程式設計的回潮。Java 是對 C/C++ 帶來的安全性和開發人員生產力傷痕的回應。它的目標永遠不是讓你更快地離開地面,而是隨著時間的推移提高生產力。
我並不是要否定任何人的經驗,我只是很難相信真正的衡量Go 對開發人員的生產力是否更好。當人們開始繼承這些遺留的 Go 系統並需要將高度過程化的領域邏輯拼湊在一起時,這些邏輯分佈在數十個微服務中。也許它確實是當今系統中更好的工具。但我也傾向於同意 Kelsey Hightower 的觀點,即單體很快就會重新流行起來;)。
  
我的論點是物件導向的語言在較大的程式碼庫中大放異彩,作為一種管理複雜性的工具,過程方法在較小的程式碼庫中變得更具吸引力。隨著時間的推移,Granted Go 正在獲得更多傳統的 OO 支援。


 

相關文章