2021 年 Go 趨勢發(fā)展報告
在當(dāng)今最流行的編程語言列表里,Go語言一直是名列前茅。眾所周知 Go 語言現(xiàn)在很火,寫 Go 代碼也很有意思,Go 在社區(qū)也很受用戶歡迎,主要是 Go 語言的速度塊,效率高。除了這些眾所周知的優(yōu)點之外,我們期待發(fā)現(xiàn) Go 更多不為人知的信息。為了發(fā)現(xiàn)更多的事實,我們在目前 Go 現(xiàn)有信息的基礎(chǔ)上,進行了深入研究。我們邀請了Go 語言專家、Goland 開發(fā)倡導(dǎo)者 Florin Pățan 來發(fā)表他對 Go 語言發(fā)展趨勢的看法。
在哪兒
約 110 萬 Go 開發(fā)者
總的來說,大約有 110 萬專業(yè)的 Go 開發(fā)者 使用 Go 作為主要開發(fā)語言。 如果我們把那些使用其他語言作為主力開發(fā)語言,但是把 Go 當(dāng)作業(yè)余愛好的開發(fā)人員算在內(nèi)的話,這一數(shù)字可能接近 270 萬。
就全球分布而言,居住在亞洲的 Go 開發(fā)者最多,大約有 57 萬開發(fā)者使用 Go 作為主要開發(fā)語言。
專家分析:
這也正是我最期待的使用 Go 開發(fā)的地方。就 Go 用戶數(shù)量而言,亞洲高居榜首,我認為主要原因是有大量的來自像騰訊、阿里巴巴、華為這些大公司的開發(fā)者。這些公司一般都有很多開發(fā)人員。
具體在哪里
下圖顯示了我們在 2020 開發(fā)者生態(tài)調(diào)查中調(diào)查的每個國家使用 Go 作為主要語言的開發(fā)者的分布情況(受訪者最多可以選擇 3 種主要語言)。中國的開發(fā)者集中度最高,有 16% 的中國開發(fā)者在使用 Go。
專家分析:
看到中國排在榜首,我一點也不驚訝。我本以為俄羅斯會排在第二,美國會高一點,大概在前五位。
中國之所以排在榜首,可能正是因為他們擁有的開發(fā)者數(shù)量最多。而且我認識的很多公司,比如 PingCAP、騰訊和華為,都有很多開發(fā)者來支撐和構(gòu)建他們的內(nèi)部工具、基礎(chǔ)設(shè)施和后端服務(wù),這些服務(wù)都和微服務(wù)相結(jié)合。這似乎是中國排在榜首關(guān)鍵原因。
我知道俄羅斯的 Go 社區(qū)非常棒,所以也難怪 Go 在那里很受歡迎。我對日本和烏克蘭很好奇,因為我沒想到他們會這么高,我以為德國和印度會更高些。記得四五年前我在柏林的時候,我認識的每一家創(chuàng)業(yè)公司都在使用 Go 。
行業(yè)洞察
Go 依然保持著開發(fā)者主要使用語言的前 10 名,根據(jù) 2020 開發(fā)者生態(tài)調(diào)查顯示 Go 的份額約為 9%。
專家分析:
我認為 Go 會一直增長。人們通常不會把 Go 作為他們開始編程的入門語言,但是會從其他語言遷移過來,例如 PHP、Ruby,但據(jù)我所知,主要從 C++、C# 遷移過來。
Go 相比 PHP 的優(yōu)勢是類型安全,因為 Go 是一門靜態(tài)類型語言,而 PHP 是門動態(tài)類型語言。這就意味著編譯器在運行時做了大量的工作來確保你寫的代碼能夠編譯并且正常運行。相比于 C++ ,Go 的優(yōu)勢是簡單。在 Go 里面,一切都是那么簡單。
總的來說,Go 的特點就是與生俱來的速度快,無論是寫代碼還是運行時。一般來說,在不做任何特殊優(yōu)化的情況下,采用 Go 語言你就能提高 5-10 倍的性能,這對公司來說是一個很重要的生產(chǎn)優(yōu)勢。同時 Go 也是一門簡單的語言,很容易上手,很容易替換現(xiàn)有項目中的微服務(wù)。
許多 IT 基礎(chǔ)設(shè)施工具,如 Kubernetes、Docker 和 Vault(舉幾個大型的例子)都是用 Go 構(gòu)建的。因此雖然很多公司是使用 Java ,但是還是會有一個團隊會用 Go,特別是為了來維護這些項目和給這些項目打補丁。這可能是 Go 采用率保持增長的另外一個原因。 這種技術(shù)在公共技術(shù)設(shè)施和部署中使用的越多,Go 就增長的越快。我認為接下來幾年會有越來越多的人采用 Go,我們將會看到大約有 15%-20% 的開發(fā)者會使用 Go。特別是考慮到開發(fā)者生態(tài)調(diào)查中問的一個問題,“您打算在今后 12 個月內(nèi)采用或遷移到其他語言嗎?”,13% 的受訪者回答是 Go。
Go開發(fā)的軟件類型
Web 服務(wù)是使用 Go 最受歡迎的領(lǐng)域,根據(jù) 2020 開發(fā)者生態(tài)調(diào)查結(jié)果顯示,其占有 36% 份額。
專家分析:
為什么是 Web 服務(wù),我認為主要原因是構(gòu)建一個 API 服務(wù)非常快。他們不需要框架,就可以用 Go 快速啟動和運行一個。
我不認為這張圖在未來會有很大變化,我真心希望看到 Web 服務(wù)得到更多的分享,因為用 Go 開始一個 Web 服務(wù)確實很簡單。
對于實用小程序,我見過很多類似的,因為 Go 很容易快速寫一個小應(yīng)用來幫你處理大量的數(shù)據(jù),寫一個小的實用程序或需要消耗大量資源的一次性任務(wù)。越來越多的人采用 Docker 和 Kubernetes,就會有越來越多的人使用 Go,僅僅是因為他們都是用 Go 寫的。任何類型的 DevOps 的工作都可以從 Go 中獲益,因為它提供了類型安全和速度。與基礎(chǔ)設(shè)施的云端交互很容易(Google、Amazon、Azure等),因為他們都有很好的 SDK 。我認為未來幾年,當(dāng)泛型到來時,我們還可以期待下 “Libraries / Frameworks” 的一些提升。
系統(tǒng)軟件——我認為隨著越來越多的人開始使用像 Rust 這樣的語言編寫系統(tǒng)軟件,這一數(shù)字將會下降。數(shù)據(jù)庫也是如此。所以這大約 6% 市場,在未來這可能會變成一個商機。編程工具——我很驚訝它在列表中份額這么高,我非常感興趣去了解一下 Go 有哪些編程工具。
使用Go的頂級行業(yè)
根據(jù) 2020 開發(fā)者生態(tài)調(diào)查 ,Go 程序員主要從事 IT 服務(wù),其次是金融和金融科技、云技術(shù)/云平臺和其他行業(yè)。
專家分析:
金融和金融科技。這是我希望看到的,因為據(jù)我所知有相當(dāng)多的銀行已經(jīng)開始采用 Go 或者正在廣泛使用 Go 作為他們的基礎(chǔ)設(shè)施。例如,來自英國的 Monzo 使用 Go 構(gòu)建了他們整個銀行系統(tǒng)。云計算和云平臺也很有意義,因為它們對于使用 Go 編寫的應(yīng)用來說是很自然的。
移動開發(fā),這是意料之外的。Go 并沒有好的移動開發(fā)歷史。如果有什么不同的話,我希望大家使用 Go 來為移動程序提供網(wǎng)絡(luò)服務(wù)或者后端服務(wù),但僅此而已。
有幾個行業(yè),我不認為 Go 的使用率會很快增加。比如,任何基于機器學(xué)習(xí)的東西,因為這仍然是 Python 的地盤。人們正在努力讓機器學(xué)習(xí)在 Go 中變得受歡迎和變得更好,但是我認為至少要幾年之后才會有一些結(jié)果。
Go 工具
包管理
Go Modules 是 Go 開發(fā)者中最受歡迎的包管理工具。根據(jù) 2020 開發(fā)者生態(tài)調(diào)查其使用率從 2019 到 41% 上升到到 2020 的 82%。
專家分析:
我認為在某種程度上我們可能不得不停止問這個問題,因為 Go Modules 已經(jīng)被設(shè)置為標準默認模型,而且 Go 團隊也想要棄用 GOPATH。到那時,其他的所有的包管理工具都將會被淘汰。
Go 路由
根據(jù) 2020 和 2018 的開發(fā)者生態(tài)調(diào)查顯示,Gorilla / Mux 和標準庫自 2018 年以來一直是使用最多的 Go 路由。
專家分析:
標準庫之所以如此受歡迎,可能是因為每當(dāng)你去 Reddit、Slack 或其他地方,人們通常都會建議你堅持使用標準庫,只有在你真正需要的時候才使用其他東西。我使用 gorilla/mux,是因為它在標準庫的基礎(chǔ)上有更多的抽象,又不會犧牲太多的性能。也可能是因為它是最接近標準庫的,而且它使得編寫服務(wù)端更容易??偟膩碚f,這種分布可能是我希望看到的。
5 大 Web 框架
根據(jù) 2020 和 2018 的開發(fā)者生態(tài)調(diào)查顯示,Gin 的使用量自 2018 年以來幾乎翻了一倍,而其他 Web 框架基本保持穩(wěn)定。
專家分析:
Gin 在 Web 上如此受歡迎,因為它是一個速度快的框架,而且也得到了很好的推薦。它也是最古老的框架之一。因為會有很多文檔擺在那兒,很多用戶已經(jīng)在使用它和推薦它。
測試框架
使用內(nèi)置測試框架的比例從 2018 年的 64% 下降到 2020 的 44%,而使用其他測試框架的比例略有增長。
專家分析:
內(nèi)置的測試框架比例很高是因為 Go 標準庫有一個非常好的開箱即用的測試庫。
內(nèi)置測試可能會下降主要是因為越來越多的人從其他語言(比如 PHP)轉(zhuǎn)向這門語言,他們試圖復(fù)制自己已有的測試習(xí)慣。
討論最多的 Go 工具和其他語言
Go 經(jīng)常在 IT 社區(qū)中被討論,Stack Overflow 就是其中之一。我們從其 Q&A 單元獲取數(shù)據(jù)來找出哪些標簽與“Go”同時出現(xiàn)次數(shù)最多。其中有 23 種工具和兩種語言(MySQL 和 PostgreSQL)。除了這些工具,還有與其他頂級語言的共存??v軸表示標簽出現(xiàn)的總次數(shù),而橫軸表示帶有“Go”的標簽的提及次數(shù)。
專家分析:
我早料到 JSON 會是個問題,把 Go 的數(shù)據(jù)結(jié)構(gòu)序列化和反序列化成 JSON 確實是很不容易的,這可能就是 JSON 會如此醒目的原因。來自其他語言的人通常很難理解 struct,除非它們來自 C++ 或 C。
基于 AWS 本身的受歡迎程度,我認為 Amazon Web Services 會有很多問題?,F(xiàn)在為 Google App Engine 開發(fā) Go 應(yīng)用程序更簡單了,但以前并不是這樣,所以才會有這么多問題。
總而言之,Go 社區(qū)是一個非常有趣且具有包容性的社區(qū),你可以成為其中的一員。從不排斥新人,鼓勵他們提出問題,探索語言。在一般的主題方面,泛型以及某些語言改進、編譯器改進等都是經(jīng)常討論的話題。
尤其是泛型,因為它是該語言最需要的特性之一,并且有大量的工作負載將受益于該特性。