Go 部落格

Go 1.23 釋出

Dmitri Shuralyov,代表 Go 團隊
2024 年 8 月 13 日

Go 團隊很高興今天釋出 Go 1.23,您可以透過訪問 下載頁面 來獲取。

如果您已經在機器上安裝了 Go 1.22 或 Go 1.21,您也可以在一個現有的模組中嘗試執行 go get toolchain@go1.23.0。這將下載新的工具鏈並讓您立即在模組中使用它。稍後,當您準備好完全切換到 Go 1.23 並將其設為模組的最低必需 Go 版本時,您可以接著執行 go get go@1.23.0。有關此功能的更多資訊,請參閱 使用 go get 管理 Go 版本模組要求

Go 1.23 相較於 Go 1.22 帶來了許多改進。其中一些亮點包括:

語言變更

  • “for-range”迴圈中的 Range 表示式現在可以是迭代器函式,例如 func(func(K) bool)。這支援對任意序列的使用者定義迭代器。標準 slicesmaps 包中有一些與迭代器配合使用的附加功能,還有一個新的 iter 包。例如,如果您希望將對映 m 的鍵收集到一個切片中,然後對其值進行排序,在 Go 1.23 中,您可以使用 slices.Sorted(maps.Keys(m)) 來實現。

    Go 1.23 還包括對泛型類型別名的預覽支援。

    在釋出說明中,閱讀有關 語言變更迭代器 的更多資訊。

工具改進

  • 從 Go 1.23 開始,Go 工具鏈可以收集使用情況和破壞性統計資訊,以幫助瞭解 Go 工具鏈的用法以及其工作情況。這是 Go 遙測,一個選擇加入的系統。請考慮選擇加入,以幫助我們保持 Go 的良好執行並更好地理解 Go 的使用情況。在釋出說明中,閱讀有關 Go 遙測 的更多資訊。
  • go 命令新增了一些便利功能。例如,執行 go env -changed 可以更輕鬆地只顯示那些有效值與預設值不同的設定,而 go mod tidy -diff 有助於在不修改 go.mod 和 go.sum 檔案的情況下確定其必要的更改。在釋出說明中,閱讀有關 Go 命令 的更多資訊。
  • go vet 子命令現在會報告對於目標 Go 版本來說太新的符號。在釋出說明中,閱讀有關 工具 的更多資訊。

標準庫改進

  • Go 1.23 改進了 time.Timertime.Ticker 的實現。在釋出說明中,閱讀有關 計時器變更 的更多資訊。
  • Go 1.23 標準庫共有 3 個新包:iterstructsunique。上面提到了 iter 包。structs 包定義了用於修改結構體屬性的標記型別。unique 包提供了用於規範化(“內部化”)可比較值的設施。在釋出說明中,閱讀有關 新標準庫包 的更多資訊。
  • 釋出說明的“庫的次要更改”部分列出了標準庫的許多改進和新增功能。“Go、向後相容性和 GODEBUG”文件列出了 Go 1.23 新增的 GODEBUG 設定
  • Go 1.23 支援 go.modgo.work 檔案中的新 godebug 指令,允許分別控制預設 GODEBUG 和 go.mod 的“go”指令,此外還支援兩年前(Go 1.21)提供的 `//go:debug` 指令註釋。請參閱關於 預設 GODEBUG 值 的更新文件。

更多改進和變更

  • Go 1.23 為 64 位 RISC-V 上的 OpenBSD(openbsd/riscv64)添加了實驗性支援。有幾項與 Linux、macOS、ARM64、RISC-V 和 WASI 相關的次要變更。在釋出說明中,閱讀有關 的更多資訊。
  • 使用配置檔案引導最佳化(PGO)時的構建時間縮短,並且在 386 和 amd64 體系結構上 PGO 的效能有所提高。在釋出說明中,閱讀有關 執行時、編譯器和連結器 的更多資訊。

我們鼓勵大家閱讀 Go 1.23 釋出說明,以獲取這些變更以及 Go 1.23 所有新功能的完整詳細資訊。

在接下來的幾周裡,請關注後續的部落格文章,這些文章將更深入地探討此處提到的一些主題,包括“range-over-func”、新的 unique 包、Go 1.23 計時器實現變更等。


感謝所有透過編寫程式碼和文件、報告錯誤、分享反饋和測試候選版本為本次釋出做出貢獻的人。您的努力有助於確保 Go 1.23 儘可能穩定。一如既往,如果您發現任何問題,請 提交 issue

盡情享用 Go 1.23!

下一篇文章:函式型別的 Range 表示式
上一篇文章:Go 1.22 中的安全隨機性
部落格索引