Go 語言現(xiàn)狀
在當今流行的編程語言中,Go 語言名列前茅。Go 語言熱情、有趣并以其快速高效的特點深受社區(qū)的青睞,但值得我們了解的還有更多。 我們對有關 Go 語言的可用信息做了更深入的研究,以期有更多發(fā)現(xiàn)。 我們的常駐 Go 專家、GoLand 的布道師 Florin P??an 受邀根據(jù)調查結果提供他的見解,探明 Go 的現(xiàn)狀。
在哪兒
約 110 萬開發(fā)者
總體來說有 110 萬專業(yè)的開發(fā)者 選擇 Go 作為其主要開發(fā)語言。但如果我們將那些以其他編程語言作為主要開發(fā)語言,卻同時使用 Go 的開發(fā)人員也算在內,這一數(shù)字就將高達 270 萬。
就其全球分布而言, 居住在亞洲的開發(fā)者最多,大約有 57 萬開發(fā)者使用 Go 作為其主要開發(fā)語言。
專家分析
這符合我對 Go 開發(fā)區(qū)域分布的預期。亞洲的 Go 用戶數(shù)量排名第一,我想這是因為那里有大量來自騰訊、阿里巴巴和華為等大公司的開發(fā)者。 這些公司通常都有很多開發(fā)者。
具體在哪兒
下圖顯示了我們在 開發(fā)者生態(tài)系統(tǒng)調查 2020 中調查的每個國家使用 Go 作為主要語言的開發(fā)者的分布情況(受訪者最多可以選擇 3 種主要語言)。 我國的開發(fā)者集中度最高,有 16% 的中國開發(fā)者使用 Go 語言。
我對我國位居榜首并不感到意外。 我本以為俄羅斯會排第二,美國會更高一些,也許會排進前五。
我國之所以排在首位,可能是因為那里的開發(fā)者非常多。 我知道的很多公司,比如 PingCAP、騰訊和華為都有很多開發(fā)者,能夠支持并構建與微服務結合的內部工具、架構和后端服務。這一點似乎很關鍵。
我知道俄羅斯的 Go 語言社區(qū)相當出色,Go 在那里深受歡迎自然也不足為奇了。我對日本和烏克蘭的結果很好奇,因為我沒想到他們會這么高,我預計德國和印度會高一點。我記得早在四五年前,我在柏林的時候,我了解到的幾乎所有創(chuàng)業(yè)公司都在使用 Go。
行業(yè)洞察
根據(jù)開發(fā)者生態(tài)系統(tǒng)調查 2020, 是專業(yè)開發(fā)者的前前10大主要語言之一,占 7% 的份額。
我認為 Go 從未停止發(fā)展。 人們通常不會以 Go 作為第一門編程語言,而傾向于從其他語言(如 PHP 和 Ruby)遷移到 Go,但據(jù)我所知,主要是從 C++ 和 C# 遷移到 Go。
與 PHP 相比,Go 的優(yōu)勢在于類型安全,因為 Go 是靜態(tài)類型的語言,而 PHP 是動態(tài)的。 這意味著由編譯器將完成大部分工作,確保您編寫的代碼將在運行時能夠正常地編譯和運行。 與 C++ 相比,Go 的優(yōu)勢在于簡單。Go 語言中,一切都很直觀。
總的來說,Go 的特點是在編寫代碼和運行時都具有很高的內置速度。通常,使用 Go 語言您可以沒有任何特殊優(yōu)化的情況下獲得5-10 倍的性能提升,這對企業(yè)而言是很關鍵的生產力優(yōu)勢。同時它簡單、易于上手,并且很容易替換現(xiàn)有項目中的微服務。
許多 IT 架構工具由 Go 構建而成,例如大型的 Kubernetes、Docker 和 Vault 等。 因此,盡管有許多公司在使用 Java,但這些公司也都會有一個團隊執(zhí)行 Go ,特別是此類項目的修補和維護。這或許也是一個 Go 語言正在逐步被更多的人所接受的原因,在公共基礎架構和部署中使用得越多,Go 的使用增長就越快。 因此,我認為未來幾年會有越來越多的人開始使用 Go,其比例可能會達到 15-20%,特別是考慮到開發(fā)者生態(tài)系統(tǒng)調查中的問題“您打算在今后 12 個月內采用/遷移到其他語言嗎? 如果有計劃,是哪種(哪些)?”其中 13% 的受訪者回答了 Go。
Go 語言開發(fā)的軟件類型
Web 服務是 Go 語言開發(fā)最受歡迎的領域,開發(fā)者生態(tài)系統(tǒng)調查 2020 結果顯示,其占比達到了36%。
對于 Web 服務,我認為首要任務是創(chuàng)建快速的 API 服務器。它們不一定需要框架,所以您可以使用 Go 快速啟動和運行。
我不認為這張圖未來會發(fā)生太大的變化。我覺得未來 Web 服務的所占比例會增長,因為用 Go 語言來上手確實很輕松。
對于 "實用小程序",情況大致相同。可以處理大量數(shù)據(jù)的快速應用、小型實用程序應用或需要大量功能的一次性任務用 Go 語言都很容易實現(xiàn)。IT 架構的情況也說得通。采用 Docker 和 Kubernetes 的人越多,使用 Go 的人就越多,因為它們都是用 Go 編寫的。 任何類型的 DevOps 工作都可以從 Go 中特別受益,因為 Go 提供了類型安全和更快的速度。 與基礎架構的交互也變得容易 – Google, Amazon, 以及 Azure 等都有很好的SDK。 我想當未來泛型到來之后,“Libraries / Frameworks” 會有一定提升。
系統(tǒng)軟件 – 我認為隨著越來越多的人開始使用 Rust 這樣的系統(tǒng)軟件,它會開始下降。 數(shù)據(jù)庫也一樣。因此在未來充滿商機的情況下,大概會占到 6% 左右。編程工具 – 我很驚訝它居然這么靠前,我十分好奇 Go 都打造了哪些編程工具。
使用 Go 的主要行業(yè)
根據(jù)開發(fā)者生態(tài)系統(tǒng)調查 2020, Go 程序員主要從事 IT 服務,其次是 金融和金融科技,云計算 / 云平臺, 和其他行業(yè)。
金融和金融科技。這是我所希望看到的,據(jù)我所知已經有相當多的銀行已經采用或正在使用 Go 語言開發(fā)的基礎架構。例如,英國的 Monzo 使用 Go 構建了他們的整個銀行系統(tǒng)。云計算和云平臺的情況也很合理,因為很多種應用程序都是以 Go 編寫的。
移動開發(fā),這是意料之外的。Go 并沒有良好的移動開發(fā)的歷史。如果有,我想人們有可能會用 Go 為移動應用制作 Web 服務或后端,但也僅此而已。
有幾個行業(yè)我預計 Go 的使用率不會在短期內出現(xiàn)增長。例如那些基于機器學習的領域,那是 Python 的強項。Go 中的機器學習也在朝著更普及、更優(yōu)良的方向前進,但我認為至少還要幾年才能真正看到成果。
Go 工具
包管理工具
Go Modules 是 Go 開發(fā)者最喜愛的軟件包管理器。根據(jù)開發(fā)者生態(tài)系統(tǒng)調查 2020,其采用率從 2019 年的 41% 上升至2020的 82%。
我認為在某種程度上我們已經不必再問這個問題了,因為 Go Modules 已經被設置為標準默認模型,并且 Go 團隊也想棄用 GOPATH。那時候其他的一切可能都會被淘汰。
Go 路由
根據(jù)2020 年和 2018 年的開發(fā)者生態(tài)系統(tǒng)調查,自 2018 年以來,Gorilla / Mux 和標準庫始終是最常用的 Go 路由器。
標準庫之所以如此受歡迎,可能是因為無論在 Reddit、Slack 還是其他地方,人們通常都會建議堅持使用標準庫,不到萬不得已不會換用其他東西。 我使用 gorilla/mux,因為在標準庫的基礎上更加抽象,而性能不會受太多影響。 這也可能是因為這是最接近標準庫的一個,它使編寫服務器更容易。總的來說,這種分布大概和預想的一樣。
5 大 Web 框架
根據(jù) 2020 年和 2018 年開發(fā)者生態(tài)系統(tǒng)的調查,自 2018 年以來,Gin 的使用量幾乎翻了一番,而其他 Web 框架基本保持穩(wěn)定。
Gin 在 web 上如此受歡迎,可能是因為它是一個快速框架,也得到了很好的推薦。它同時也是最古老的框架之一。所以有很多現(xiàn)成的文檔,很多用戶已經在使用和推薦它。
測試框架
使用內置測試的開發(fā)者比例從 2018 年的 64% 下降到 2020 年的 44%,而其他測試框架的使用量略有增長。
內置測試占比很高,是因為 Go 標準庫有一個非常好的開箱即用的測試庫。
內置測試的下降可能是因為越來越多的人轉移自其他語言,比如 PHP,他們更傾向于重復他們已有的測試習慣。
討論最多的 Go 工具和其他語言IT 社區(qū)經常討論 Go,Stack Overflow 就是其中之一。 我們從問答區(qū)的數(shù)據(jù)中找出最常與“Go”一同出現(xiàn)的標簽。 其中,有 23 種工具和 2 種語言 -“MySQL”和“PostgreSQL”。 除了工具外,與其他主要語言也有共存。 縱軸表示標簽出現(xiàn)的總數(shù),橫軸表示帶有“Go”的標簽的提及。
我料到 JSON 會成為一個問題。把 Go 的數(shù)據(jù)結構序列化和反序列化成 JSON 確實很不容易,這或許是 JSON 如此醒目的原因。 struct 之所以出現(xiàn),是因為來自其他語言的人通常很難理解這個問題,除非他們來自 C++ 或 C 語言。
根據(jù) Amazon Web Services 自身的普及程度,我預計 AWS 這里會有很多問題。現(xiàn)在為 Google App Engine 開發(fā) Go 應用程序更簡單了,之前還不是如此,所以才會有這么多問題。
總而言之,成為 Go 社區(qū)的一員讓我感受到了這是一個非常有趣且包容的社區(qū)。 新人總會得到支持,也被鼓勵提出問題和探索語言。 對于一般主題,最常討論的是泛型以及一些語言的改進、編譯器的改進等。
尤其是泛型,因為它是語言最需要的功能之一,很多工作負載都可以從這個功能中受益。
總結
根據(jù)以上的數(shù)據(jù),從開發(fā)者人群、開發(fā)地區(qū)分布、go語言特點、開發(fā)環(huán)境、開發(fā)工具等方面,我認為go語言的前景是很不錯的。至于取代C語言我覺得應該目前不行或者也不會取代C語言。它們會在各自不同的領域發(fā)揮更好的效果。
另外,如果又想要學習Go語言的開發(fā)者,可以去我的Github看看,我整理了關于golang的學習資料,還算比較全吧!歡迎大家給我Star!
項目地址:https://github.com/0voice/Introduction-to-Golang