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」迴圈中的範圍運算式現在可以是迭代函式,例如
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
指示詞,除了兩個版本前(Go 1.21)提供的//go:debug
指示詞註解之外,它還允許獨立控制預設 GODEBUG 和go.mod
的「go」指示詞。請參閱 預設 GODEBUG 值 的更新文件。
更多改進和變更
- Go 1.23 為 64 位元 RISC-V(
openbsd/riscv64
)上的 OpenBSD 新增實驗性質的支援。對於 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 盡可能地穩定。若您發現任何問題,請一如往常地 提交問題。
享受 Go 1.23!
下一篇:範圍運算函式類型
上一篇:Go 1.22 中的安全隨機性
部落格索引