Go 部落格
Go 1.21 釋出了!
今天,Go 團隊非常激動地釋出 Go 1.21,您可以訪問 下載頁面 來獲取它。
Go 1.21 包含了大量新功能和改進。以下是一些值得關注的改動;完整列表請參考 釋出說明。
工具改進
- 我們曾在 1.20 版本預覽的 PGO(Profile Guided Optimization) 功能現已正式可用!如果主包目錄中存在一個名為
default.pgo的檔案,go命令將使用它來啟用 PGO 構建。有關更多詳細資訊,請參閱 PGO 文件。我們已經衡量了 PGO 對各種 Go 程式的影響,並看到了 2-7% 的效能提升。 go工具現在支援 向後 和 向前 的語言相容性。
語言變更
- 新的內建函式:min, max 和 clear。
- 對泛型函式的型別推斷進行了多項改進。規範中關於 型別推斷的描述 已得到擴充套件和澄清。
- 在未來的 Go 版本中,我們計劃解決 Go 程式設計中最常見的陷阱之一:迴圈變數捕獲。Go 1.21 提供了此功能的一個預覽版本,您可以透過設定環境變數來在程式碼中啟用它。有關更多詳細資訊,請參閱 LoopvarExperiment wiki 頁面。
標準庫新增功能
- 新的 log/slog 包,用於結構化日誌記錄。
- 新的 slices 包,用於對任何元素型別的 slice 進行常見操作。它包括排序函式,這些函式通常比 sort 包更快、更符合人體工程學。
- 新的 maps 包,用於對任何鍵或元素型別的 map 進行常見操作。
- 新的 cmp 包,提供用於比較有序值的實用工具。
效能改進
除了啟用 PGO 時的效能改進之外
- Go 編譯器本身已經使用 PGO 進行了重新構建,因此構建 Go 程式的效能提升了 2-4%,具體取決於主機架構。
- 由於對垃圾回收器的調優,一些應用程式的尾部延遲可能會降低高達 40%。
- 使用 runtime/trace 收集跟蹤資訊的 CPU 開銷在 amd64 和 arm64 平臺上已顯著降低。
新增 WASI 埠
Go 1.21 為 WebAssembly System Interface (WASI) 預覽版 1(GOOS=wasip1, GOARCH=wasm)添加了一個實驗性埠。
為了方便編寫更通用的 WebAssembly (Wasm) 程式碼,編譯器還支援一個用於從 Wasm host 匯入函式的 新指令 `go:wasmimport`。
感謝所有為本次釋出做出貢獻的人,包括編寫程式碼、報告 bug、分享反饋和測試候選版本。你們的努力確保了 Go 1.21 儘可能穩定。一如既往,如果您發現任何問題,請 提交 issue。
盡情享用 Go 1.21!
下一篇文章:向後相容性、Go 1.21 和 Go 2
上一篇文章:試驗專案模板
部落格索引