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」迴圈中的範圍運算式現在可以是迭代函式,例如 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 指示詞,除了兩個版本前(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 中的安全隨機性
部落格索引