Go 部落格

Go 1.21 釋出了!

Eli Bendersky,代表 Go 團隊
2023 年 8 月 8 日

今天,Go 團隊非常激動地釋出 Go 1.21,您可以訪問 下載頁面 來獲取它。

Go 1.21 包含了大量新功能和改進。以下是一些值得關注的改動;完整列表請參考 釋出說明

工具改進

  • 我們曾在 1.20 版本預覽的 PGO(Profile Guided Optimization) 功能現已正式可用!如果主包目錄中存在一個名為 default.pgo 的檔案,go 命令將使用它來啟用 PGO 構建。有關更多詳細資訊,請參閱 PGO 文件。我們已經衡量了 PGO 對各種 Go 程式的影響,並看到了 2-7% 的效能提升。
  • go 工具現在支援 向後向前 的語言相容性。

語言變更

  • 新的內建函式:min, maxclear
  • 對泛型函式的型別推斷進行了多項改進。規範中關於 型別推斷的描述 已得到擴充套件和澄清。
  • 在未來的 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
上一篇文章:試驗專案模板
部落格索引