Go 部落格
Go 1.23 釋出
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)。這支援對任意序列的使用者定義迭代器。標準slices和maps包中有一些與迭代器配合使用的附加功能,還有一個新的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.Timer和time.Ticker的實現。在釋出說明中,閱讀有關 計時器變更 的更多資訊。 - Go 1.23 標準庫共有 3 個新包:
iter、structs和unique。上面提到了iter包。structs包定義了用於修改結構體屬性的標記型別。unique包提供了用於規範化(“內部化”)可比較值的設施。在釋出說明中,閱讀有關 新標準庫包 的更多資訊。 - 釋出說明的“庫的次要更改”部分列出了標準庫的許多改進和新增功能。“Go、向後相容性和 GODEBUG”文件列出了 Go 1.23 新增的 GODEBUG 設定。
- Go 1.23 支援
go.mod和go.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 中的安全隨機性
部落格索引