Go 團隊在 8 月 19 日發布 Go 1.27,距離 1.26 剛好半年,Go 1 相容性承諾照舊。這次的清單裡有幾個等了很久的東西:泛型方法、翻新的 JSON 層,以及標準庫直接內建後量子簽章。對日常寫 Go 的人來說,這是一版改動集中在「寫起來」與「跑起來」兩端的 release。
語言層:泛型方法終於落地
Go 1.27 的方法可以宣告自己的型別參數了。標準庫裡現成的例子是 math/rand/v2 的 N 方法:以前要為每個整數型別各寫一個方法,現在簽名直接寫成對任意整數型別泛化。限制仍在——介面方法還是不能帶型別參數。另一個等了多年的改動是結構實字的鍵:現在允許任何合法的欄位選擇器,嵌入欄位可以直接在實字裡初始化,不用再一層層嵌套。泛型函式的型別推斷也放寬到所有指定情境:放進 composite literal、型別轉換、channel 發送,都不用再寫明確的型別參數。
標準庫:json v2 接管,後量子簽章進入 TLS
標準庫最大的變化是 encoding/json/v2 正式登場,伴隨底層串流處理的 jsontext 套件。更關鍵的決定是:既有的 encoding/json API 不動,但底層改由 v2 實作驅動,反序列化明顯變快,預設行為也更嚴格——無效 UTF-8 與重複欄位名會被拒絕,既有程式可透過 GOEXPERIMENT 選項暫時退回。安全方面,新的 crypto/mldsa 提供 FIPS 204 的 ML-DSA 後量子簽章,並整合進 crypto/x509 與 TLS 1.3。另外終於有了標準的 uuid 套件,實驗性的 simd 套件則提供可攜的向量運算抽象,目前涵蓋 arm64 Neon 與 wasm。
工具鏈與執行環境
go fix 新增了一批 modernizer,能把舊寫法自動改成新慣例;go doc 支援 package@version 查詢,可以直接看某個依賴版本的文件;go mod tidy 會自動把多個 require 區塊整理成標準的兩段式結構。執行環境方面,小於 80 位元組的物件配置成本最多降 30%,整體程式約有 1% 改善,代價是執行檔多 60KB;runtime/pprof 的 goroutineleak profile 轉正,能自動抓出永久卡住的 goroutine——這是 Go 開發裡最難查的問題之一。平台要求也更新:macOS 需要 13 Ventura 以上。
升級注意事項
對多數專案,升級是低風險的:語言變更都是放寬,不會弄壞舊碼;JSON 的行為變化藏在「更嚴格的預設」裡,如果服務會處理來路不明的輸入,先在測試環境跑一輪再上。建議的順序是:升級後先跑 go fix 讓現代化改寫跑一輪,接著檢查依賴中是否有依賴 JSON 寬鬆行為的套件,最後考慮要不要在 TLS 層啟用 ML-DSA。後量子遷移是未來幾年所有語言都要面對的事,Go 把它放進標準庫,等於替整個生態省掉一次自選密碼學套件的分歧。
參考來源
本文由 AI 協助自上述來源整理,經人工審核後發布。
