開源go-zero作者描述自己從Java到Go語言經歷 - Reddit
我寫程式碼已經超過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 是出於以下考慮:
- 我們現有的所有程式碼都是用 Java 編寫的,沒有人知道它是如何組織的。當伺服器掛起時,每個人都告訴重新啟動,大多數問題都沒有根本原因。
- 我決定重寫整個系統,並改用另一種程式語言,以避免從以前的程式碼庫中複製/貼上。
- 我們有數千萬使用者,伺服器成本是 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 支援。
相關文章
- 我的Go語言學習經歷Go
- 結合自己的經歷談談怎麼更好地學習Go語言Go
- Go和Rust都是系統語言和通用語言 - RedditGoRust
- Java程式從開發到執行經歷過程Java
- 二叉樹的構建以及遍歷(Java語言描述)二叉樹Java
- Meta開源其類似GPT-3的語言模型 - RedditGPT模型
- PHP 程式設計師轉 Go 語言的經歷分享PHP程式設計師Go
- 從零開始——GO語言基礎語法Go
- Blazor 002 : 一種開歷史倒車的UI描述語言 -- RazorBlazorUI
- 用一句話描述Go語言的命令Go
- Java從8到21的語言新特性Java
- Go語言的context包從放棄到入門GoContext
- DevOps經歷的 Log4j痛苦經歷 - Redditdev
- go語言實現自己的RPC:go rpc codecGoRPC
- Go 語言開源 CI/CD 容器 Drone 介紹Go
- Go 語言開源 Excelize 基礎庫影片教程GoExcelize
- [從RPC到Go-Micro 壹]Go語言實現RPC程式設計RPCGoC程式程式設計
- 從高階語言到機器語言
- 用C++從0開始開發自己的程式語言C++
- GO語言必備的五大開源工具!Go開源工具
- Go語言自定義自己的SSH-ServerGoServer
- go語言教程哪裡有?go 語言優秀開源專案彙總Go
- 非常適合GO語言新手學習的《Go語言從入門到實戰——簡明高效的Go語言實戰指南》課程——推薦分享Go
- NLP 與 NLU:從語言理解到語言處理
- 設計模式之責任鏈模式——Java語言描述設計模式Java
- Go語言從入門到實戰-蔡超-極客時間Go
- 有哪些值得學習的 Go 語言開源專案?Go
- [分享] Go 語言開源專案 Drone 搭配 GitLab 安裝GoGitlab
- Go語言————1、初識GO語言Go
- [Go 夜讀 第 139 期] Go 語言 Excelize 開源基礎庫介紹GoExcelize
- Java語言電子病歷原始碼Java原始碼
- python 是開源語言嗎:Python 是一種開源語言嗎?Python
- go語言安卓開發Go安卓
- 從經典結構到改進方法,神經網路語言模型綜述神經網路模型
- Go語言入門經典第18章Go
- Go語言實現的Java Stream APIGoJavaAPI
- GO語言————2、GO語言環境安裝Go
- Java和Go語言二選一,選擇哪門語言好?JavaGo