Go 部落格

2021 年 Go 開發者調查結果

Alice Merrick
2022 年 4 月 19 日

衷心感謝社群的積極響應!

2021 年,我們於 10 月 26 日至 11 月 16 日進行了 Go 開發者調查,共收到 11,840 份回覆,創下了我們六年開展調查以來的最高參與人數!感謝您抽出寶貴時間,分享您使用 Go 的經驗,為社群提供寶貴的見解。

亮點

  • 大多數回覆與往年一致。例如,Go 的滿意度仍然很高,達到 92%,75% 的受訪者在工作中使用 Go。
  • 今年我們隨機抽取了一些使用 Go VS Code 外掛的參與者,這導致了受訪者構成發生了一些變化。
  • 缺少關鍵庫、語言特性和基礎設施是使用 Go 的最常見障礙。(注:本次調查在 Go 1.18 釋出泛型之前進行,泛型是排名第一的缺失功能)
  • 受訪者希望優先改進除錯和依賴管理。
  • 使用模組時最大的挑戰涉及版本控制、使用私有倉庫和多模組工作流程。(注:本次調查在 Go 1.18 之前進行,Go 1.18 引入了工作區以解決許多這些問題)。
  • 81% 的受訪者對Go 專案的長期發展方向充滿信心

我們聽取了誰的意見?

我們的使用者畫像多年來一直保持穩定(檢視 2020 年結果)。與往年一致,Go 主要用於科技行業。70% 的受訪者是軟體開發者,少數在 IT 或 DevOps 領域工作,76% 的受訪者表示他們在工作中使用 Go 進行程式設計。受訪者所在行業的柱狀圖 顯示 Go 在工作中比工作外使用更普遍的柱狀圖 Go 的用途柱狀圖,其中 API/RPC 服務和 CLI 應用最常見

2021 年的一些新使用者畫像

  • 大多數受訪者將其組織描述為企業或中小型企業,約四分之一將其組織描述為初創企業。諮詢公司和公共機構則不太常見。
  • 絕大多數受訪者在不足十人的團隊中工作。
  • 超過一半 (55%) 的受訪者每天在工作中使用 Go。受訪者在工作之外使用 Go 的頻率較低。
Bar chart of organization type where enterprise is the most common response Bar chart of team size where 2 to 5 is the most common size Frequency of using Go at work versus outside of work where using Go at work is most often on a daily basis and outside of work is less common and most often on a weekly basis

性別認同

我們在調查中詢問性別認同,因為它能讓我們瞭解調查結果代表的人群,併為衡量社群包容性增加一個維度。Go 團隊重視多樣性和包容性,不僅因為這是正確的做法,還因為不同的聲音能幫助我們做出更好的決策。今年我們重新措辭了性別認同問題,以更好地包含其他性別身份。與往年一樣,認為自己是女性的比例大致相同(2%)。隨機抽樣組也是如此,這表明這不僅僅是抽樣造成的。顯示受訪者性別認同的柱狀圖,其中 92% 的受訪者認同自己是男性

輔助技術

今年我們再次發現約 8% 的受訪者正在使用某種形式的輔助技術。大多數挑戰涉及對 Go 相關網站或其程式碼編輯器中更高對比度主題和更大字型大小的需求;我們計劃在今年晚些時候根據網站反饋採取行動。這些無障礙需求是我們所有人在為 Go 生態系統貢獻時都應該牢記的。

深入瞭解 Go 採用面臨的挑戰

今年我們修訂了問題,以便針對實際未採用 Go 的情況及其原因。首先,我們詢問受訪者在去年是否曾將 Go 與其他語言進行過評估。43% 的受訪者表示他們曾評估過切換到 Go、從 Go 切換出去,或者在沒有現有語言的情況下采用 Go。這些評估中,80% 主要出於商業原因。

Chart showing proportion of respondents who evaluated Go against another language in the last year

我們預期 Go 最常見的用例會是評估 Go 的開發者最常見的預期用途。API/RPC 服務是迄今為止最常見的用途,但令人驚訝的是,資料處理是第二常見的預期用例。

Chart showing the kind application they considered using Go

在評估 Go 的受訪者中,75% 最終使用了 Go。(當然,由於幾乎所有調查受訪者都表示使用 Go,我們很可能沒有聽到那些評估了 Go 但決定不使用它的開發者的聲音。)

Chart showing proportion who used Go compared to those who stayed with the current language or chose another language

對於那些評估了 Go 但沒有使用它的受訪者,我們接著詢問是什麼挑戰阻止了他們使用 Go,以及其中哪個是主要障礙。顯示使用 Go 的障礙圖表

從這些結果中我們得出的情況支援了先前的發現,即缺少功能以及生態系統/庫支援不足是 Go 採用的最顯著技術障礙。

我們詢問了受訪者缺少哪些功能或庫的更多詳情,發現泛型是最常見的關鍵缺失功能——我們預計 Go 1.18 引入泛型後,這將不再是顯著障礙。其次常見的缺失功能與 Go 的型別系統有關。在進行進一步更改之前,我們希望瞭解引入泛型如何影響或解決圍繞 Go 型別系統的潛在需求。目前,我們將收集更多關於這些需求的背景資訊,未來可能會探索不同的方式來滿足這些需求,例如透過工具、庫或對型別系統進行更改。

至於缺失的庫,對於新增什麼能夠為絕大多數想要採用 Go 的開發者掃清障礙,目前尚無明確共識。這將需要進一步探索。

那麼,當受訪者沒有選擇 Go 時,他們轉而使用了什麼?

Chart of which languages respondents used instead of Go

Rust、Python 和 Java 是最常見的選擇。Rust 和 Go 的功能集互補,因此當 Go 無法滿足專案功能需求時,Rust 可能是一個不錯的選擇。使用 Python 的主要原因是缺少庫和現有的基礎設施支援,因此 Python 龐大的包生態系統可能使切換到 Go 變得困難。類似地,選擇 Java 而非 Go 的最常見原因是 Go 缺少功能,這在 1.18 版本引入泛型後可能會得到緩解。

Go 滿意度和優先順序

讓我們看看 Go 表現良好的方面以及可以改進的地方。

與去年一致,92% 的受訪者表示過去一年中對使用 Go 非常滿意或有些滿意。

Overall satisfaction on a 5 points scale from very dissatisfied to very satisfied

社群態度的年度趨勢顯示出輕微波動。使用 Go 不足 3 個月的人往往不太同意這些說法。受訪者越來越認為 Go 對其公司的成功至關重要。

Attitudes around using Go at work Community attitudes around welcomeness and confidence in direction of the Go project

優先順序

過去幾年,我們要求受訪者對特定領域進行滿意度和重要性評分;我們利用這些資訊來找出對受訪者重要但他們不滿意的領域。然而,這些領域中的大多數在重要性和滿意度方面都只顯示出微小差異。

Scatter plot of importance compared to satisfaction showing most areas have high satisfaction and where binary size is less important than other areas

今年我們引入了一個新問題,以探索在特定領域優先開展工作的替代方式。“假設您有 10 個 GopherCoin,用於改進使用 Go 的以下方面。您將如何分配您的 GopherCoin?” 兩個獲得顯著更多 GopherCoin 的領域是依賴管理(使用模組)和診斷錯誤,這兩個領域將在 2022 年投入資源進行改進。

Overall sum of coins spent on each area for improvement

使用模組時的挑戰

最常見的模組相關挑戰是跨多個模組工作(佔受訪者的 19%),其次是關於版本控制的評論(包括對提交穩定 v1 API 的擔憂)。與版本控制相關的是,9% 的回覆討論了版本管理或更新依賴。排在前 5 位的其他挑戰包括私有倉庫(特別是 GitLab 的身份驗證)以及記住不同的 go mod 命令並理解其錯誤訊息。

學習 Go

今年我們採用了新的結構來探索不同 Go 經驗水平之間的相對生產力。絕大多數受訪者(88%)同意他們能夠經常達到高水平的生產力,85% 同意他們在編寫 Go 程式碼時通常能夠達到心流狀態。隨著 Go 經驗的增加,同意的比例也隨之增加。

Charts showing proportion of respondents who agree they feel productive using Go and can achieve a state of flow while writing in Go

我們應該在哪些領域投入精力編寫最佳實踐文件?

一半的受訪者希望在效能最佳化和專案目錄結構方面獲得更多最佳實踐指導。不出所料,新 Go 使用者(使用 Go 不足 1 年)比經驗豐富的 Go 使用者需要更多指導,儘管兩類人群最關注的領域是一致的。值得注意的是,新 Go 使用者在併發方面尋求的指導比經驗豐富的 Go 使用者更多。

Chart showing which areas respondents want more guidance on best practices

開發者如何學習一門新語言?

約一半的受訪者在工作中學習了一門新語言,但幾乎同樣多 (45%) 的人在學校或工作之外學習。受訪者最常 (90%) 表示獨自學習。在那些表示他們在工作中學習的人中,雖然可能存在集體學習的機會,但 84% 的人選擇獨自學習而不是集體學習。

Chart showing half of respondents learned a new language at work while 45% learned a new language outside of school or work Chart showing 90% of respondents learned their last new language alone

許多頂級的學習資源都強調了良好文件的重要性,但現場教學作為語言學習的資源也顯得尤為有用。

Chart showing which resources are most helpful for learning a new programming language where reading reference docs and written tutorials are most useful

開發者工具和實踐

與往年一樣,絕大多數調查受訪者表示在 Linux (63%) 和 macOS (55%) 系統上使用 Go。主要在 Linux 上進行開發的受訪者比例似乎隨著時間推移略有下降。

Primary operating system from 2019 to 2021

目標平臺

超過 90% 的受訪者以 Linux 為目標平臺!儘管在 macOS 上開發的受訪者多於 Windows,但他們部署到 Windows 的頻率高於 macOS。

Chart showing which platforms respondents deploy their Go code on

模糊測試

大多數受訪者不熟悉模糊測試,或者仍然認為自己是模糊測試的新手。基於這一發現,我們計劃 1) 確保 Go 的模糊測試文件除了 Go 中模糊測試的具體內容外,也解釋模糊測試的概念,以及 2) 設計輸出和錯誤訊息使其具有可操作性,以便幫助模糊測試新手成功應用它。

Chart showing proportion of respondents who have used fuzzing

雲計算

Go 在設計時就考慮到了現代分散式計算,我們希望繼續改進使用 Go 構建雲服務的開發者體驗。今年,將 Go 程式部署到全球三大雲提供商(Amazon Web Services、Google Cloud Platform 和 Microsoft Azure)的受訪者比例保持大致相同,而部署到自建或公司自有伺服器的比例持續下降。

Bar chart of cloud providers used to deploy Go programs where AWS is the most common at 44%

部署到 AWS 的受訪者中,部署到託管 Kubernetes 平臺的比例有所增加,現在在部署到三大雲提供商任一提供商的使用者中佔 35%。所有這些雲提供商都看到將 Go 程式部署到虛擬機器的使用者比例下降。

Bar charts of proportion of services being used with each provider

今年的變化

去年我們引入了模組化調查設計,以便在不延長調查時間的情況下提出更多問題。今年我們繼續採用模組化設計,儘管有些問題被取消,有些則被新增或修改。沒有受訪者看到了調查中的所有問題。此外,某些問題的樣本量可能小得多,因為它們是根據前一個問題選擇性地提出的。

今年調查中最顯著的變化在於我們招募參與者的方式。往年,我們透過 Go 部落格宣佈調查,並在 Twitter、Reddit 或 Hacker News 等各種社交渠道上被轉載。今年,除了傳統渠道,我們還利用 VS Code Go 外掛隨機選擇使用者顯示一個提示,詢問他們是否願意參與調查。這建立了一個隨機樣本,我們用它來與來自傳統渠道的自我選擇受訪者進行比較,並幫助識別自我選擇偏差的潛在影響。

Proportion of respondents from each source

將近三分之一的受訪者是透過這種方式獲得的,因此他們的回答有可能對今年我們看到的整體回覆產生顯著影響。這兩組之間的一些關鍵差異包括:

更多新 Go 使用者

隨機抽樣組中新 Go 使用者(使用 Go 不足一年)的比例更高。這可能是因為新 Go 使用者與 Go 生態系統或社交渠道的聯絡較少,因此他們更有可能在 IDE 中看到調查廣告,而不是透過其他方式發現。無論原因如何,很高興能聽到更廣泛的 Go 社群的聲音。

Comparison of proportion of respondents with each level of experience for randomly sampled versus self-selected groups

更多 VS Code 使用者

毫不奇怪,透過 VS Code 外掛參與調查的受訪者中有 91% 在使用 Go 時更喜歡使用 VS Code。因此,今年我們看到 VS Code 的編輯器偏好顯著更高。當我們排除隨機樣本時,結果與去年沒有統計學上的差異,因此我們知道這是樣本變化的結果,而不是整體偏好。同樣,VS Code 使用者也比其他受訪者更有可能在 Windows 上進行開發,因此我們看到今年對 Windows 的偏好略有增加。我們還看到某些與 VS Code 編輯器使用相關的開發者技術的使用方式略有變化。

Grouped bar chart of which editor respondents prefer from each sample group Grouped bar chart of primary operating system respondents use to develop go on Grouped bar chart showing which techniques respondents use when writing in Go

不同的資源

隨機抽樣組將 Go 部落格等社交渠道評為回答 Go 相關問題的首選資源的比例較低,因此他們可能不太可能在這些渠道上看到調查廣告。

Grouped bar chart showing the top resources respondents use when writing in Go

結論

感謝您與我們一起回顧 2021 年開發者調查的結果!重申一下,一些主要收穫是:

  • 我們的多數年度指標保持穩定,大多數變化源於樣本的變化。
  • 對 Go 的滿意度仍然很高!
  • 四分之三的受訪者在工作中使用 Go,許多人每天使用 Go,因此幫助您完成工作是我們的首要任務。
  • 我們將優先改進除錯和依賴管理工作流程。
  • 我們將繼續努力,使 Go 成為一個包容所有 Go 使用者的社群。

瞭解開發者的經驗和挑戰有助於我們衡量進展並指導 Go 的未來。再次感謝所有為本次調查做出貢獻的人——沒有你們,我們不可能完成這項工作。希望明年再見!

下一篇文章:分享您關於使用 Go 開發的反饋
上一篇文章:何時使用泛型
部落格索引