Go 14週年

落雷發表於2023-11-13

原文在這裡

由 Russ Cox, for the Go team 釋出於2023年11月10日

今天,我們慶祝Go開源釋出的第十四個生日!Go在過去一年裡取得了巨大的進展,釋出了兩個功能豐富的版本,並實現了其他重要的里程碑。

我們釋出了Go 1.20 in FebruaryGo 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引入了新的cmpmapsslices包,這是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: 戀水無意


相關文章