Go 部落格

Go 語言的十三年

Russ Cox,代表 Go 團隊
2022 年 11 月 10 日

今天我們慶祝 Go 開源釋出十三週年。地鼠 Gopher 已經是個少年啦!

對 Go 來說,這是不平凡的一年。最重要的事件是三月份釋出的 Go 1.18,它帶來了許多改進,其中最引人注目的是 Go 工作區(workspaces)、模糊測試(fuzzing)和泛型(generics)。

工作區使得同時處理多個模組變得容易,這在維護一組相互之間存在模組依賴的相關模組時非常有用。要了解工作區,請參閱 Beth Brown 的部落格文章“熟悉 Go 工作區”和工作區參考

模糊測試是 go test 的一個新特性,它可以幫助您找到程式碼未能正確處理的輸入:您可以定義一個模糊測試,它應該適用於任何輸入,然後模糊測試會在程式碼覆蓋率的引導下嘗試不同的隨機輸入,試圖使模糊測試失敗。當開發必須對任意(甚至攻擊者控制的)輸入具有魯棒性的程式碼時,模糊測試特別有用。要了解更多關於模糊測試的資訊,請參閱教程“模糊測試入門”和模糊測試參考,並留意 Katie Hockman 在 GopherCon 2022 上的演講“Fuzz Testing Made Easy”,該演講應該很快就會線上釋出。

泛型(Generics),很可能是 Go 最受期待的特性,它為 Go 增加了引數多型性,允許編寫適用於各種不同型別但仍能在編譯時進行靜態檢查的程式碼。要了解更多關於泛型的資訊,請參閱教程“泛型入門”。要了解更多細節,請參閱部落格文章“泛型介紹”和“何時使用泛型”,或者 Robert Griesemer 和 Ian Lance Taylor 在 Google Open Source Live 2021 的 Go Day 上的演講“在 Go 中使用泛型”,以及在 GopherCon 2021 上的演講“泛型!”。

與 Go 1.18 相比,八月份釋出的 Go 1.19 相對平靜:它專注於完善和改進 Go 1.18 引入的特性,以及內部穩定性改進和最佳化。Go 1.19 中一個明顯的變化是增加了對Go 文件註釋中的連結、列表和標題的支援。另一個變化是為垃圾收集器添加了軟記憶體限制,這在容器工作負載中特別有用。要了解更多關於近期垃圾收集器改進的資訊,請參閱 Michael Knyszek 的部落格文章“Go 執行時:四年回顧”,他的演講“在 Go 中尊重記憶體限制”,以及新的“Go 垃圾收集器指南”。

我們一直在努力讓 Go 開發能夠優雅地擴充套件到更大的程式碼庫,特別是在 VS Code Go 和 Gopls 語言伺服器方面的工作。今年,Gopls 版本專注於改進穩定性和效能,同時提供了對泛型的支援以及新的分析和程式碼透鏡。如果您還沒有使用 VS Code Go 或 Gopls,請嘗試一下。請參閱 Suzy Mueller 的演講“使用 Go 編輯器構建更好的專案”以獲取概述。此外,得益於 Delve 對原生 Debug Adapter Protocol 的支援,在 VS Code 中除錯 Go 變得更加可靠和強大。試試 Suzy 的“除錯尋寶”吧!

開發規模的另一方面是專案中的依賴數量。在 Go 誕生 12 週年大約一個月後,Log4shell 漏洞為行業敲響了警鐘,強調了供應鏈安全的重要性。Go 的模組系統正是為此目的而設計的,旨在幫助您理解和跟蹤依賴關係,確定您正在使用哪些特定的依賴,並判斷其中是否存在已知漏洞。Filippo Valsorda 的部落格文章“Go 如何緩解供應鏈攻擊”概述了我們的方法。九月份,我們在 Julie Qiu 的部落格文章“Go 的漏洞管理”中預告了 Go 在漏洞管理方面的方法。這項工作的核心是一個新的、經過精心策劃的漏洞資料庫和一個新的 govulncheck 命令,該命令使用高階靜態分析來消除僅依賴模組需求可能導致的大部分誤報。

為了瞭解 Go 使用者,我們每年都會進行 Go 年度問卷調查。今年,我們的使用者體驗研究人員還增加了一項輕量級的年中 Go 問卷調查。我們的目標是收集足夠的回覆以達到統計學意義,同時不對整個 Go 社群造成負擔。有關結果,請參閱 Alice Merrick 的部落格文章“Go 開發者 2021 年度調查結果”和 Todd Kulesza 的文章“Go 開發者 2022 年第二季度調查結果”。

隨著世界各地逐漸恢復旅行,我們也高興能在 2022 年的 Go 大會上與各位見面,特別是在七月份柏林的 GopherCon Europe 和十月份芝加哥的 GopherCon 大會。上週,我們舉辦了年度線上活動,Google Open Source Live 上的 Go 日。以下是我們在這些活動中發表的部分演講

今年的另一個里程碑是 Russ Cox、Robert Griesemer、Rob Pike、Ian Lance Taylor 和 Ken Thompson 在 Communications of the ACM 上發表了文章“Go 程式語言和環境”。這篇由 Go 最初設計者和實現者撰寫的文章解釋了我們認為使 Go 如此流行和高效的原因。簡而言之,Go 的努力在於提供一個完整的開發環境,面向整個軟體開發過程,並側重於可伸縮性,既適用於大型軟體工程專案,也適用於大規模部署。

在 Go 語言的第 14 個年頭,我們將繼續努力使 Go 成為大規模軟體工程的最佳環境。我們計劃特別關注供應鏈安全、改進的相容性以及結構化日誌,所有這些都在本文中已經連結過。此外,還會有許多其他改進,包括配置檔案引導最佳化(profile-guided optimization)。

謝謝!

Go 語言的成就遠不止於 Google 的 Go 團隊所做的一切。感謝所有貢獻者和 Go 社群的每一位成員,感謝你們的幫助使 Go 成為今天如此成功的程式設計環境。我們祝大家在新的一年裡一切順利。

下一篇文章:分享您關於使用 Go 開發的反饋
上一篇文章:Go 執行時:四年回顧
部落格索引