《2021 年 Go 官方開發者調查報告》
每年 Go 官方都會舉辦一次 Go 開發者的調查,去年也不例外。不過調查完,收集了資料後就不見人影了...不然是社區和某時間的朋友們都會問我在哪裡可以看到。
這不,最近官方終於發布了《Go Developer Survey 2021 Results[1]》,我直接翻譯了(有刪減,僅展示重點內容),大家可以看看,了解下Go 的社群行情發展。
Go 開發者調查結果
亮點
- ##大多數答覆與往年一致。例如,對 Go 的滿意度仍然很高,達到 92%,75% 的受訪者在工作中使用 Go。
- 今年,我們使用 Go VSCode 外掛程式對一些參與者進行了隨機抽樣,這導致了對調查作出回應的人發生了一些變化。
- 缺少關鍵程式庫、語言功能和基礎設施是使用 Go 的最常見障礙。 (註:這項調查是在Go1.18 發布之前進行的,其中泛型是報告中最缺的第一大功能)
- 受訪者希望優先改善調試和依賴性管理。
- 在使用模組時,最大的挑戰是版本管理、使用私人倉庫和多模組工作流程。 (注意:這項調查是在Go 1.18之前進行的,Go 1.18引入了工作空間,解決了許多這些問題)。
- 81% 的受訪者對 Go 計畫的長期發展方向有信心。
我們的人口統計逐年保持穩定(見 2020 年的結果)。與往年一致,Go主要用於科技業。 70% 的受訪者是軟體開發人員,少數是 IT 或 DevOps,76% 的受訪者表示他們在工作中用 Go 編程。



大多數受訪者將他們的組織描述為企業或中小型企業,約四分之一的人將他們的組織描述為新創公司。諮詢公司和公共機構的情況要少得多。 絕大多數受訪者在不到 10 人的團隊中工作。 超過一半(55%)的受訪者每天在工作中使用 Go。受訪者在工作以外使用 Go 的頻率較低。



Go 應用面臨的挑戰
我們問受訪者在過去一年中是否評估過使用其他語言來取代Go。 43% 的受訪者表示,他們曾評估切換到 Go,或在先前沒有既定語言的情況下採用 Go。
這些評估中的 80% 主要是出於商業原因。

我們預期 Go 最常見的用例將是評估 Go 的人最常見的預期用途。到目前為止,API/RPC 服務是最常見的用途,但令人驚訝的是,資料處理是第二常見的預期用例。

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

對於那些評估了 Go 但沒有使用 Go 的人,我們接著問他們有哪些挑戰阻礙了他們使用 Go,其中哪一個是主要障礙。

我們從這些結果中得到的情況支持了先前的發現,即缺少功能和缺乏生態系統/庫支持是採用Go的最重要的技術障礙。
我們詢問了更多關於受訪者缺少哪些功能或函式庫的細節,發現泛型是最常見的關鍵性缺失功能-- 我們希望在Go1.18 引入泛型之後,這將成為一個不那麼重要的障礙。接下來最常見的缺失功能是與 Go 的類型系統有關的。
我們希望在做出更多改變之前,看看引入泛型會如何影響或解決圍繞 Go 類型系統的潛在需求。
目前,我們將收集更多關於這些需求背景的信息,並可能在未來探索不同的方式來滿足這些需求,例如透過工具、函式庫或對類型系統的修改。
至於缺少的函式庫,對於增加什麼樣的函式庫可以解開最大比例的想採用Go的人的障礙,並沒有明確的共識。這需要進一步的探索。
那麼,當受訪者不選擇 Go 時,他們用什麼來代替呢?

Rust、Python 和 Java 是最常見的選擇。
Rust 和 Go 有互補的功能集,所以當 Go 無法滿足專案的功能需求時,Rust 可能是個不錯的選擇。
使用 Python 的主要原因是缺少庫和現有的基礎設施支持,所以 Python 的大型軟體包生態系統可能會使其難以轉換為 Go。
同樣地,使用 Java 的最常見的原因是 Go 的功能缺失,這可能會因為 1.18 版本中引入泛型而得到緩解。
Go 滿意度和優先順序
讓我們看看 Go 在哪些方面做得好,哪些方面可以改進。
與去年一致,92% 的受訪者表示他們在過去一年中對 Go 的使用非常滿意或比較滿意。

今年,我們引入了一個新的問題,以探索在特定領域中確定工作優先順序的其他方法。
問題:"假設你有10 個GopherCoins 可以用來改善圍棋工作的以下方面。你會如何分配你的硬幣?"
突出的兩個領域是依賴性管理(使用模組)和診斷錯誤,這些領域我們將在2022 年投入資源。

在Go 依賴管理上,最常見的挑戰是:
在多個模組之間工作(19% 的受訪者)。 是關於版本的評論(包括對承諾穩定的 V1 版 API 的恐懼)。
與版本有關,9% 的答案討論了版本管理或更新依賴關係。排在前五名的是關於私有倉庫的挑戰(包括對 GitLab 的認證)和記住不同的 go mod 命令以及理解它們的錯誤訊息。
開發者工具與實務
與往年一樣,絕大部分調查對象表示在Linux(63%)與macOS(55%)系統上使用Go。隨著時間的推移,主要在 Linux 上開發的受訪者的比例似乎略有下降的趨勢。

在使用 VSCode 外掛程式進行調查的受訪者中,有 91% 的受訪者在使用 Go 時更喜歡使用 VSCode。

目標(部署)平台
#超過90% 的受訪者以Linux 為目標!儘管在macOS 上開發的受訪者比Windows多,但他們更常部署到Windows 而不是macOS。

總結
整體回顧我們 2021 年的開發者調查結果 重申一下,一些關鍵的收穫。
我們的大多數同比指標保持穩定,大多數變化是由於我們的樣本變化。 對Go 的滿意程度仍然很高! #四分之三的受訪者在工作中使用Go,許多人每天都在使用Go,所以幫助你完成工作是首要任務。 我們將優先考慮對偵錯和依賴性管理工作流程的改進。 我們將繼續努力,讓 Go 成為各種 Gophers 的包容性社群。
簡單來講,就是欣欣向榮,大部分人對 Go 都比較滿意。
最大矛盾點是泛型和依賴管理。泛型已在 Go1.18 已經釋出,依賴管理持續在改進,也會加大對調試工具的最佳化。
以上是《2021 年 Go 官方開發者調查報告》的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在Go中,函數生命週期包括定義、載入、連結、初始化、呼叫和返回;變數作用域分為函數級和區塊級,函數內的變數在內部可見,而區塊內的變數僅在區塊內可見。

在Go中,可以使用正規表示式比對時間戳記:編譯正規表示式字串,例如用於匹配ISO8601時間戳記的表達式:^\d{4}-\d{2}-\d{2}T \d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ 。使用regexp.MatchString函數檢查字串是否與正規表示式相符。

在Go中,可以使用gorilla/websocket包發送WebSocket訊息。具體步驟:建立WebSocket連線。傳送文字訊息:呼叫WriteMessage(websocket.TextMessage,[]byte("訊息"))。發送二進位訊息:呼叫WriteMessage(websocket.BinaryMessage,[]byte{1,2,3})。

Go和Go語言是不同的實體,具有不同的特性。 Go(又稱Golang)以其並發性、編譯速度快、記憶體管理和跨平台優點而聞名。 Go語言的缺點包括生態系統不如其他語言豐富、文法更嚴格、缺乏動態類型。

記憶體洩漏會導致Go程式記憶體不斷增加,可通過:關閉不再使用的資源,如檔案、網路連線和資料庫連線。使用弱引用防止記憶體洩漏,當物件不再被強引用時將其作為垃圾回收目標。利用go協程,協程棧記憶體會在退出時自動釋放,避免記憶體洩漏。

使用IDE檢視Go函數文件:將遊標停留在函數名稱上。按下熱鍵(GoLand:Ctrl+Q;VSCode:安裝GoExtensionPack後,F1並選擇"Go:ShowDocumentation")。

在Golang中,錯誤包裝器允許你在原始錯誤上追加上下文訊息,從而創建新錯誤。這可用於統一不同程式庫或元件拋出的錯誤類型,簡化偵錯和錯誤處理。步驟如下:使用errors.Wrap函數將原有錯誤包裝成新錯誤。新錯誤包含原始錯誤的上下文資訊。使用fmt.Printf輸出包裝後的錯誤,提供更多上下文和可操作性。在處理不同類型的錯誤時,使用errors.Wrap函數統一錯誤類型。

對並發函數進行單元測試至關重要,因為這有助於確保其在並發環境中的正確行為。測試並發函數時必須考慮互斥、同步和隔離等基本原理。可以透過模擬、測試競爭條件和驗證結果等方法對並發函數進行單元測試。
