<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Go 1.18 版本新功能解讀

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 作者:馬哥Linux運維 ? 2022-09-15 09:45 ? 次閱讀

9 月 8 日,Go 語言社區發布 2022 年第二季度開發者調查報告,本次調研覆蓋 5752 位受訪開發者,主題涉及他們在使用 Go 1.18 全新功能特性(包括泛型、安全工具和工作區)時的真實感受,以下是本次報告的重要內容。

泛型已經得到迅速接納。大多數受訪者都知道 Go 1.18 版本中引入了泛型,約四分之一受訪者稱已經在實際代碼中使用泛型。大多數開發者對泛型的發布贊賞有加,但也有部分受訪者發現目前的泛型設計限制太多。

Fuzzing 對大多數 Go 開發者來說仍是新鮮事物。Go 新版本內置的模糊測試在知名度上遠遠不及泛型,受訪者也不確定為什么或者何時需要使用模糊測試。

第三方依賴項成為最重要的安全問題。目前,受訪者稱如何避免包含已知漏洞的依賴項成為安全工作中的最大挑戰??傮w而言,安全工作往往缺乏計劃、也沒有明確的回報,所以工具開發者應當盡可能自審自查,幫助開發者節約時間和精力。

我們的新功能發布工作還可以做得更好。關注 Go 官方博客的開發者一般對新版本的變化比較熟悉,但隨機抽樣的受訪者則不太了解最新版本的情況。因此我們要么應該在博文以外再開拓新的 Go 生態消息渠道,要么更努力地廣泛分享博文內容。

錯誤處理仍是個難題。隨著泛型的發布,受訪者在使用 Go 時面臨的最大難題變成了如何處理錯誤??傮w來看,大家對 Go 語言的滿意度仍然很高,我們發現受訪者使用 Go 語言的方式并沒有明顯變化。

調查結果解讀

在本文中,我們將通過一系列圖表來解讀此番調查。所有圖表均采用相同格式,標題部分是向受訪者們提出的具體問題。除非另有說明,否則各問題均為單選形式,受訪者只能選擇其一。圖表的副標題部分,會標注是否為多選問題或開放性問題。

對于開放性問題,Go 團隊成員認真閱讀并手動整理了受訪者們的意見。大家對于這類問題的回應多種多樣,因此我們挑選了最具共性的前十大主題,其余主題則被歸類為“其他”。

為了幫助大家了解每條結論的證據權重,我們使用誤差線來表示響應意見的 95% 置信區間:條形較窄,則表示信心越強。有時,可能有多條響應意見的誤差線彼此重疊,意味著這些響應的相對順序并不具備統計學意義(或者說這些意見之間相互綁定)。各圖表的右下角為圖表中受訪者者人數,形式為“n= 受訪者人數”。

泛型

支持類型參數(即泛型)的 Go 1.18 發布之后,我們希望大家如何看待和采用這項新功能,并確定使用泛型時的常見挑戰或障礙。

絕大多數受訪者(86%)都知道 Go 1.18 版本引入了泛型。雖然我們預計這個比例會超過一半,但沒想到有這么高。我們還發現,約四分之一受訪者已經開始在 Go 代碼中使用泛型(26%),其中 14% 表示是在生產或已發布的代碼中使用。大多數受訪者(54%)并不抵觸泛型,只是目前還沒開始使用。** 另有 8% 的受訪者有意在 Go 中使用泛型,但出于種種原因而暫未行動。

09115814-3433-11ed-ba43-dac502259ad0.png

093c538e-3433-11ed-ba43-dac502259ad0.png

是什么阻止了一些開發人員使用泛型?困擾大多數受訪者的其實就兩個理由:首先,30% 的受訪者表示他們發現現有泛型實現仍有諸多限制,例如不支持參數化方法、類型推斷和類型切換等。受訪者表示,這些問題限制了泛型的可用空間,或者導致泛型代碼過于冗長。

第二個理由則是某些依賴項尚不支持泛型——其中最典型的例子是 linter,此外還有仍在使用的早期 Go 版本,或者尚不提供 Go 1.18 包(26%)的 Linux 發行版等。12% 的受訪者則是因為學習曲線陡峭或說明文檔不充分而選擇放棄。

除了這些重要因素,受訪者還反饋了一些相對不太常見、但仍有意見的阻礙,如下圖所示。這里,我們僅列出已經在使用泛型,或者曾嘗試使用泛型但未能成功的受訪者。

094bf2e4-3433-11ed-ba43-dac502259ad0.png

我們還詢問了嘗試用過泛型的受訪者,希望了解他們的感受。令人振奮的是,10% 的受訪者表示泛型確實簡化了自己的代碼、降低了代碼重復度。除了高度贊賞之外,其他受訪者也普遍(43%)對泛型給予積極評價;相比之下,只有 6% 的受訪者對泛型表達了負面評價或感受。

與之前提到的使用挑戰相似,近三分之一受訪者表示 Go 的泛型實現限制太多。


Go 團隊正參考這些結果,研究是否或如何放寬這些限制。

096058ba-3433-11ed-ba43-dac502259ad0.png ? 安全性

經歷了 2020 年的 SolarWinds 漏洞之后,安全軟件開發實踐再次受到關注。Go 團隊也在優先考慮安全保障問題,包括建立軟件物料清單(SBOM)的配套工具、模糊測試以及最近推出的漏洞掃描。為了達成目標,本次調查特別詢問了關于軟件開發安全實踐和挑戰的問題,特別是:

Go 開發者目前在使用哪些類型的安全工具?

Go 開發者如何發現和解決漏洞?

要編寫出安全的 Go 軟件,最大的挑戰是什么?

調查結果表明,雖然靜態分析工具得到了廣泛應用(65%),但只有少數受訪者在使用這些工具發現漏洞(35%),或者以其他方式提高代碼安全性(33%)。受訪者們表示,安全工具主要運行在 CI/CD 過程(84%),只有少數開發者會在開發期間運行這些工具(22%)。

這與我們團隊進行的其他安全研究一致,即安全掃描大多集中在 CI/CD 期間,而這時才關注安全問題其實為時已晚。更理想的方法,應該是在構建之前就知曉依賴項是否存在漏洞、驗證版本更新是否解決了這些漏洞。等到 CI 針對 PR 運行完整測試時,隱患往往已經難以剔除。

09722126-3433-11ed-ba43-dac502259ad0.png

099564e2-3433-11ed-ba43-dac502259ad0.png

我們還向受訪者詢問了他們在安全開發軟件時的最大挑戰。目前最常見的難題是如何評估第三方庫的安全性(57%), 其實主題漏洞掃描器(例如 GitHub 的 dependabot 或者 Go 團隊的 govulncheck)就能很好地完成任務。


其他反饋意見則為新工具提供了發展空間:受訪者們表示,他們在編寫代碼并驗證成果是否存在漏洞時,往往很難全流程遵循最佳實踐。

09a4ce14-3433-11ed-ba43-dac502259ad0.png

模糊測試是提高應用程序安全性的另一種好辦法,但大多數受訪者似乎對此還不熟悉。只有 12% 的受訪者在實際工作中用過模糊測試,5% 的受訪者稱已經在使用 Go 內置模糊測試工具。

在“為什么會感覺模糊測試難以使用”的開放性問題中,我們發現影響最大的并非技術因素:占比最高的三個答案分別是“不了解如何使用模糊測試”(23%)、“沒時間進行模糊測試或者其他安全保障工作”(22%)、“沒法以符合預期的方式和時間進行模糊測試”(14%)。

這些發現表明,我們還需要投入精力幫助開發者了解模糊測試的價值、模糊測試要測什么,以及如何把它應用在不同的代碼庫當中。

09d2021c-3433-11ed-ba43-dac502259ad0.png

09e91f92-3433-11ed-ba43-dac502259ad0.png

為了更好地了解大家如何檢測漏洞、解決常見安全任務,我們詢問受訪者在過去一年中是否發現過自己的 Go 代碼或依賴項中存在漏洞。對于給出肯定答案的受訪者,我們又進一步提出問題,例如當時是怎么發現漏洞的、如何調查及 / 或解決,以及整個過程中哪些環節最為棘手。

首先,我們發現漏洞掃描確有成效。四分之一的受訪者表示從第三方依賴項中發現了漏洞。但實際使用漏洞掃描的受訪者只占三分之一,所以在這部分群體中再統計依賴項漏洞比例時,我們發現結果從 25% 倍增至 46%。除了依賴項和 Go 自身的漏洞外,有 12% 的受訪者表示發現的是自己代碼中的漏洞。

大多數受訪者(65%)表示,他們發現的漏洞源自安全掃描程序。受訪者最常用的工具是 GitHub 的 dependabot(38%),使用比例高于所有其他漏洞掃描程序的總和(27%)。除掃描之外,受訪者了解漏洞的其他常見方式還包括公共報告,例如發布說明和 CVE(22%)。

09f87258-3433-11ed-ba43-dac502259ad0.png

0a0e38f4-3433-11ed-ba43-dac502259ad0.png

在意識到存在漏洞后,受訪者們最常見的解決方法(67%)是升級相應依賴項。在使用漏洞掃描程序(專門用于檢測第三方依賴項中漏洞)的受訪者中,選擇升級依賴項的比例則上升至 85%。近三分之一的受訪者會閱讀 CVE 或漏洞報告(31%),只有 12% 的受訪者會進一步做深入調查,了解自己的軟件是否受到影響、受到怎樣的影響。

只有 12% 的受訪者表示會對代碼漏洞造成的潛在影響做進一步調查,這樣的比例確實低得令人吃驚。為了掌握更多細節,我們還詢問受訪者在應對漏洞方面遇到過哪些挑戰。幾個主要答案的占比基本相當,包括害怕依賴項更新會影響代碼執行,以及通過 go.mod 文件更新間接依賴項的難度較高等。

我們也詢問了一般使用哪種調查方式了解漏洞影響或探究根本原因,這 12% 愿意做進一步調查的受訪者們給出了更積極的答案:其中 70% 對漏洞的潛在影響進行了調查,并發現這才是整個過程中最困難的部分。

除了調查本身的難度,他們還提到這項工作通常不在項目計劃之內,而且完全沒有直接回報。

Go 團隊認為,這種深入調查應用程序中各依賴項安全態勢的好習慣,將直接決定漏洞可能給組織帶來的實際風險、甚至是否發生數據泄露。

因此,我們設計出 govulncheck,在調用的函數中存在漏洞時向開發者發出提醒,并列出該函數在代碼中的確切位置。希望這款工具能幫助開發者快速對應用程序中的致命漏洞進行調查,減少計劃外的安全工作負擔。

0a1b327a-3433-11ed-ba43-dac502259ad0.png

0a2a825c-3433-11ed-ba43-dac502259ad0.png

工具體驗

下面,我們又詢問了關于工具體驗的問題:

自上次調查以來,編輯環境是否發生了變化?

開發者愿意使用工作區嗎?如果愿意,在初上手時感覺有哪些不便?

開發者如何處理內部包文檔?

VS Code 在受訪者中的人氣似乎還在持續增長。自 2021 年以來,受訪者就將其選為最受歡迎的 GO 代碼編輯器,今年的支持比例更是從 42% 上升至 45%。VS Code 和 GoLand 兩大高人氣編輯器似乎不受組織規模的影響,在大企業和小公司里都很受歡迎。但從統計結果來看,業余開發者似乎更偏愛 VS Code。

在 2021 年通過 gopls 語言服務器強化 VS Code 的 Go 支持能力之后,Go 團隊一直想了解 gopls 中存在哪些使用痛點。雖然我們已經從開發者那邊收到了不少反饋,但不清楚會不會有很多開發者直接禁用掉了這項功能。

為了收集關于 gopls 的負面意見,我們專門統計了那些所使用的編輯器能夠支持 gopls 的受訪者(無論他們是否實際使用 gopls),并發現禁用比例只有 2%。而且在 VS Code 上,禁用比例更是下降至 1%。這讓我們對 gopls 的表現更具信心,也期待大家在 GitHub 上提交更多關于 gopls 的問題。

0a3c398e-3433-11ed-ba43-dac502259ad0.png

0a4dfa98-3433-11ed-ba43-dac502259ad0.png

在工作區這邊,很多受訪者似乎是在本次調查中才知道 Go 能夠支持多模塊工作區。對 VS Code 用戶的隨機調查顯示,大多數受訪者從來就沒聽說過工作區(在隨機抽樣受訪者中占比 53%,在自薦受訪者中占比 33%)。

其實對泛型的認知和接納差異在這兩個受訪者群體間也體現得非常明顯,分別為 93% 和 68%。也許是因為我們目前的 Go 博客或社交媒體渠道還不足以涵蓋足夠的 Go 開發者,所以很多新功能并不能有效傳遞至用戶耳中。

我們還發現,有 9% 的受訪者曾經試用過工作區,另有 5% 表示想要嘗試但最終未能進行。關于使用 Go 工作區的阻礙,位居榜首的是 go work 命令缺乏說明文檔和有意義的錯誤消息(21%),其次則是要求重構現有 repo(13%)。

與安全部分的討論類似,同樣有不少受訪者給出了“沒時間 / 不是優先事項”之類的理由。按照我們的理解,這意味著跟實際帶來的收益相比,工作區的理解和設置門檻仍然偏高,也可能是開發者之前就已經找到了自己的解決辦法。

0a70a3b8-3433-11ed-ba43-dac502259ad0.png

0a8a37a6-3433-11ed-ba43-dac502259ad0.png

在 Go 模塊發布之前,不少組織已經在通過內部文檔服務器(例如支持 godoc.org 的服務器)為員工提供內部 Go 包文檔。但現在,這類服務器的設置流程比以往更為復雜,我們也在考慮要不要投資來簡化這個過程。因此,我們詢問受訪者如何查看內部 Go 模塊文檔,想了解這是不是他們的首選工作方式。

結果顯示,目前最常見的內部 Go 文檔查看方式是閱讀代碼(81%),其中約半數覺得這樣就挺好,但也有 39% 認為能有內部文檔服務器就更好了。

我們還詢問了這類服務器應該由誰配置和維護,有三分之二的受訪者認為應該是軟件工程師,余下三分之一覺得可以指派專門的 IT 支持或運營人員。

從這個角度看,理想的文檔服務器應該是那種交鑰匙解決方案,或者至少不會帶來過多的額外工作負擔(一個人在午休時間就能維護好)??紤]到目前開發人才嚴重短缺的現實,這樣的要求完全在情理之中。

0a984b70-3433-11ed-ba43-dac502259ad0.png

0aa2057a-3433-11ed-ba43-dac502259ad0.png

0ab6345a-3433-11ed-ba43-dac502259ad0.png

調查對象

總體而言,自 2021 年的調查以來,受訪者群體的基本特征并沒有太大變化。部分受訪者(53%)擁有兩年及以上 Go 使用經驗,其余受訪者則是 Go 社區中的新人。

約三分之一受訪者來自小型企業(員工少于 100 人),四分之一來自中型企業(100 至 1000 名員工),四分之一來自大型企業(員工超過 1000 人)。與去年類似,我們發現 VS Code 上的調查彈窗吸引到了不少北美和歐洲以外地區的開發者。

0ac86710-3433-11ed-ba43-dac502259ad0.png

0ad6825a-3433-11ed-ba43-dac502259ad0.png

0af7cea6-3433-11ed-ba43-dac502259ad0.png

受訪者們如何使用 Go 語言

受訪者使用 Go 語言的具體方式跟上年相比,同樣沒有出現什么統計意義上的差異。最常見的兩大用例仍然是構建 API/RPC 服務(73%)和編寫 CLI(60%)。

我們使用線性模型,嘗試調查受訪者使用 Go 的時間與他們的開發方向之間是否存在關聯。我們發現,Go 經驗不足一年的受訪者一般更關注 GUI、物聯網、游戲、機器學習 /AI 或移動應用等開發目標。而一年以上受訪者則明顯較少用 Go 語言進行這些領域的開發,說明他們可能是在實踐當中遇到了重大障礙。

大多數受訪者會在 Linux(59%)或 macOS(52%)上進行 Go 開發,而部署目的地則絕大多數是 Linux 系統(93%)。在本次調查中,我們新增了在 Windows Subsystem for Linux(WSL)上進行 Go 開發的選項,并發現有 13% 的受訪者選擇了這種方式。

感受與挑戰

最后,我們詢問了受訪者過去一年來對 Go 的總體使用感受,特別是使用 Go 時遇到過的最大挑戰。我們發現,93% 的受訪者表示“還行”(30%)或非常滿意(63%),基本與 2021 年調查得到的 92% 持平。

多年以來,泛型一直是 Go 開發中的爭議焦點。Go 1.18 對類型參數的支持雖然緩和了舊矛盾,但又帶來了錯誤處理這個新問題??梢钥隙ǖ氖?,錯誤處理不是孤立存在的,與庫缺失或不夠成熟、開發者學習難度大、最佳實踐不易實施、對類型系統的其他修訂(例如支持枚舉及更多函數式編程語法)等其他問題密切相關??傊?,除了泛型之外,Go 開發者還需要面對坎坷的前進道路。

0b0bd05e-3433-11ed-ba43-dac502259ad0.png總結

本次 Go 開發者調查主要側重于 Go 1.18 版本中的新功能。我們發現泛型的普及正在穩步推進,但開發者也遇到了當前實現中的不少限制。模糊測試和工作區的普及率仍然有限,但核心并非技術原因:要想擴大受眾,這兩項功能首先需要解決什么時候用、怎么用的問題。

另一個阻礙則是開發者沒工夫關注這些新特性,這一點在安全開發方面也有體現。根據這些結論,Go 團隊將確定下一步工作的優先級,并影響到未來的工具設計思路。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11004

    瀏覽量

    206854
  • 代碼
    +關注

    關注

    30

    文章

    4566

    瀏覽量

    66968
  • 開發者
    +關注

    關注

    1

    文章

    509

    瀏覽量

    16509

原文標題:你信嗎?Go 泛型竟然已經被迅速采用

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    華秋DFM新功能丨可焊性檢查再次升級,搶先體驗!

    寫在前面—— 感謝后臺各位伙伴們的關注和支持,在大家的期盼下,華秋DFM終于再次迎來了新功能更新! 往期迭代的版本,無一不幫助大家提前規避了很多關于生產和設計的隱患問題,所以此次也秉承著為大家節省
    的頭像 發表于 09-26 17:18 ?543次閱讀
    華秋DFM<b class='flag-5'>新功能</b>丨可焊性檢查再次升級,搶先體驗!

    原創Altium Designer 17全程安裝及新功能視頻教程

    本帖最后由 ぃZhenyuっ 于 2016-12-14 15:07 編輯 期待許久,Altium終于發布了最新版本的Altium Designer17 ,伴隨著發布推出了許多新功能,在此 我們
    發表于 11-20 21:11

    Cadence/OrCAD PSpice 16.6新功能介紹

    介紹了版本16.6的新功能。主要有:learning pspice等
    發表于 07-02 11:33

    Altium Designer 20 新功能官方直播

    ,Altium大中華區技術經理將為大家帶來Altium Designer 20的官方直播!現場、講解演示新版本的全新功能及增強功能,還等什么,快復制鏈接報名吧!報名鏈接:https
    發表于 12-27 15:06

    Android9有哪些新功能

    了一些新功能來持續改進設備電源管理,以確保將系統資源提供給最需要它們的應用.近幾個android版本中電量優化功能:Android 5.0 Lol...
    發表于 12-28 08:08

    IE8三大可靠性新功能解

    IE8三大可靠性新功能解析 微軟IE項目經理Andy Zeigler今天通過官方博客探討了新版IE8的三個可靠性新功能:松散耦合式IE(LCIE)、自動崩潰恢復、
    發表于 08-02 09:09 ?567次閱讀
    IE8三大可靠性<b class='flag-5'>新功能解</b>析

    MD機功能解讀

    MD機功能解讀 部分囊中羞澀的發燒友經過一段時間的省吃儉用后,終于把新世紀的錄音新貴——MD隨身聽迎回家中。但頭痛的事情亦隨即產
    發表于 03-19 14:16 ?2614次閱讀

    VX.2.3版本新功能介紹

    這30秒的視頻亮點VX.2.3版本新功能墊標準/標準+和墊的專業。
    的頭像 發表于 11-06 07:07 ?3102次閱讀

    Linux 5.4內核正式版本有哪些新功能

    今天,Linus Torvalds正式簽署了Linux 5.4內核的正式版本,帶來了大量新功能,強化了安全,更新了硬件驅動,你值得擁有。
    的頭像 發表于 11-25 16:31 ?9915次閱讀

    Go語言創始人反對在Go 1.18的標準庫中引入泛型支持

    泛型支持,建議不要改動 Go 1.18 中的標準庫。 Rob 提出以上建議主要有兩個依據: 其一,是因為改動范圍過大,可能會出現差錯。Rob 表示,Go 語言 1.18
    的頭像 發表于 10-26 09:45 ?1671次閱讀
    <b class='flag-5'>Go</b>語言創始人反對在<b class='flag-5'>Go</b> <b class='flag-5'>1.18</b>的標準庫中引入泛型支持

    Go 1.18 正式發布后有哪些特性

    距離 Go 1.17 發布七個月后,Go 1.18 正式發布了!Go 1.18 是一個包含大量新功能
    的頭像 發表于 03-30 17:50 ?2824次閱讀

    Go開源13周年 2022發布更多改變的Go 1.18Go 1.19版本

    Go 來說,2022 是非常重要的一年,這一年??Go?發布了?Go 1.18?和?Go 1.19?
    的頭像 發表于 11-17 16:37 ?915次閱讀

    SOLIDWORKS 2023新功能揭秘!SOLIDWORKS Simulation 2023版本

    SOLIDWORKS 2023新功能揭秘!SOLIDWORKS Simulation 2023版本
    的頭像 發表于 12-08 17:53 ?2787次閱讀
    SOLIDWORKS 2023<b class='flag-5'>新功能</b>揭秘!SOLIDWORKS Simulation 2023<b class='flag-5'>版本</b>

    微電阻計功能解讀

    微電阻計功能解讀 微電阻計是一種測量電阻的儀器,它可以將電阻值轉換成電壓或電流進行測量,并能夠進行多種測量、刻度和校準。微電阻計主要用于科學實驗、工業生產和儀器校準等領域,是一款非常重要的電子測試儀
    的頭像 發表于 08-24 14:25 ?641次閱讀

    TSMaster 2024年1月最新版本,新功能太實用

    、新增TTS機箱模塊、新增地圖顯示模塊等。一大波超實用的新功能,一起來看看吧!體驗新功能建議您將軟件更新至最新版本TSMaster下載鏈接01工具箱相關更新工具箱模
    的頭像 發表于 02-19 12:12 ?447次閱讀
    TSMaster 2024年1月最新<b class='flag-5'>版本</b>,<b class='flag-5'>新功能</b>太實用
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>