Go 1.27加入泛型方法與JSON v2,小型物件配置成本最高降30%

Go團隊正式 發布 Go 1.27,更新涵蓋語言規格、開發工具、執行環境與標準函式庫。新版支援泛型方法,JSON v2也正式進入標準函式庫,而執行環境則降低小型物件的記憶體配置成本,並加入正式版的goroutine洩漏分析功能。

Go 1.27加入泛型方法後,方法可以自行宣告型別參數,同一個方法因此能處理多種資料型別。以math/rand/v2為例,新的Rand.N可處理不同整數型別,不必再像過去一樣,替不同整數型別分別提供方法。

另外兩項語言調整則簡化程式寫法,在開發者建立結構資料時,可以直接指定巢狀或內嵌結構中的欄位,而泛型函式的型別推論也擴大到所有賦值情境,包括建立複合資料、型別轉換及透過通道傳送函式時,都能減少手動指定型別的需求。

標準函式庫新增encoding/json/v2及負責較低階資料串流處理的encoding/json/jsontext。JSON v2提供更多處理選項,預設檢查也較嚴格,既有encoding/json則在底層改採v2實作,在維持既有程式相容性的情況下,提高將JSON資料解碼成Go資料結構的效能。

Go 1.27也改善記憶體配置效率,會依物件大小採用特化的配置方式。官方指出,部分小於80位元組的物件配置成本最高可降低30%,對記憶體配置密集的程式而言,整體效能預期約可提升1%。

新版也正式提供goroutine洩漏分析。goroutine是Go執行並行工作的輕量單元,要是因通道或鎖定機制而永久阻塞,可能持續佔用系統資源。新的分析功能可協助開發者找出因這類並行機制阻塞、且已無法恢復執行的goroutine,方便追查長時間執行服務的資源問題。

Go 1.27新增符合FIPS 204標準的ML-DSA後量子數位簽章,並加入X.509憑證處理與TLS 1.3支援。標準函式庫也加入UUID產生與解析功能,以及仍屬實驗階段的SIMD支援。開發工具也有更新,go doc可查詢指定版本的套件文件,go fix則增加新的程式碼現代化修正規則。