Go 14周年
原文在這里。
由 Russ Cox, for the Go team 發布于2023年11月10日
今天,我們慶祝Go開源發布的第十四個生日!Go在過去一年里取得了巨大的進展,發布了兩個功能豐富的版本,并實現了其他重要的里程碑。
我們發布了Go 1.20 in February和Go 1.21 in August,主要側重于實現改進而非引入新的語言變化。
Go 1.20中預覽的Profile-guided optimization(PGO)在Go 1.21中正式發布,允許Go編譯器讀取程序的性能分析數據,然后花更多時間優化程序中運行頻率最高的部分。在Go 1.21中,啟用PGO通常可以提升2%到7%的CPU利用率。有關概述,請參閱“Go 1.21中的Profile-guided optimization”,有關完整文檔,請參閱“Profile-guided optimization用戶指南”。
自Go 1.2版本以來,Go一直支持在go test期間收集覆蓋率分析數據。而Go 1.20版本新增了在通過go build構建的可執行文件中收集覆蓋率分析數據的支持,這意味著你可以在更大規模的集成測試中進行覆蓋率分析。有關詳細信息,請參閱“Go集成測試的代碼覆蓋率”文章。
自從“Go 1和Go程序的未來”以來,兼容性一直是Go的重要組成部分。Go 1.21通過擴展GODEBUG的使用約定進一步提高了兼容性,特別是在需要進行更改(例如重要的錯誤修復),但這種更改可能會破壞現有程序的情況下。有關概述,請參閱博文“向后兼容性,Go 1.21和Go 2”,有關詳細信息,請參閱文檔“Go、向后兼容性和GODEBUG”。
Go 1.21還引入了內置的工具鏈管理支持,允許您像更改其他依賴項的版本一樣輕松地更改特定模塊中使用的Go工具鏈版本。有關概述,請參閱博文“Go 1.21中的向前兼容性和工具鏈管理”,有關詳細信息,請參閱文檔“Go工具鏈”。
另一個重要的工具成就是將磁盤索引集成到gopls,即Go的LSP服務器。這在典型用例中將gopls的啟動延遲和內存使用降低了3-5倍。有關技術細節,請參閱“為不斷增長的Go生態系統擴展gopls”文章。您可以通過運行以下命令來確保您正在運行最新版本的gopls:
$ go install golang.org/x/tools/gopls@latest
Go 1.21引入了新的cmp、maps和slices包,這是Go的第一個通用標準庫,同時也擴展了可比較類型的集合。有關詳細信息,請參閱博文“所有可比較類型”。
總的來說,我們繼續完善泛型,并通過演講和博客文章來解釋重要的細節。今年的兩篇重要文章分別是“拆解類型參數”和“關于類型推斷,你想知道的都在這里”。
Go 1.21中的另一個重要新包是log/slog,它為標準庫添加了用于結構化日志記錄的官方API。請參閱“使用slog進行結構化日志記錄”以獲取概述。
對于WebAssembly(Wasm)端口,Go 1.21支持在WebAssembly System Interface(WASI)預覽1上運行。WASI預覽1是WebAssembly的一個新“操作系統”接口,受到大多數服務器端Wasm環境的支持。請查看“Go中的WASI支持”以獲取詳細信息。
在安全方面,我們繼續確保Go引領著幫助開發人員了解其依賴關系和漏洞的道路,Govulncheck 1.0于7月發布。如果您使用VS Code,可以使用Go擴展直接在編輯器中運行govulncheck,詳細配置參見這個教程。如果您使用GitHub,您可以使用GitHub Action for govulncheck在CI/CD中運行govulncheck。有關檢查漏洞問題的依賴關系的更多信息,請參閱今年的Google I/O演講“使用Go和Google構建更安全的應用程序”。
另一個重要的安全里程碑是Go 1.21的高度可復制的工具鏈構建。有關詳細信息,請參閱“完全可重現的驗證Go工具鏈”,其中包括在無需使用任何Linux工具情況下,在Mac上復制Ubuntu Linux Go工具鏈的演示。
今年真的是碩果累累!!!
在接下來的第15年,我們將繼續努力使Go成為規模化軟件工程的最佳環境。我們特別興奮的一項變化是重新定義for循環的:=語義,以消除意外別名錯誤的可能性。有關詳細信息,請參閱“在Go 1.22中修復for循環”文章,其中包括在Go 1.21中預覽此更改的說明。
致謝
Go項目一直不僅僅是我們在Google Go團隊的工作。感謝所有的貢獻者和Go社區的每一位成員,使Go成為今天的樣子。我們祝愿大家在未來的一年里一切順利。
聲明:本作品采用署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0)進行許可,使用時請注明出處。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 戀水無意
總結
- 上一篇: NLP技术如何为搜索引擎赋能
- 下一篇: 手撕Vuex-安装模块数据