Go 1.27 發布,支援泛型

 

Go 發布 1.27 版本,終於迎來泛型支援,這項備受期待的改動使得在特定資料類型的命名空間內添加泛型函數成為可能,而此前此類函數必須聲明在整個套件的作用域內,除此之外,此次更新主要集中在工具鏈、運行時和庫的實作方面,並且延續了 Go 1 的兼容性承諾。

語言特性(Language Changes)

支援泛型方法(Generic Methods):

  • 允許在結構體方法上直接定義泛型參數(例如 func (r *Rand) N[Int intType](n Int) Int)。
  • 嵌套/內嵌欄位字面量初始化:可以在結構體字面量(Struct literals)中直接用 Key 指定初始化內嵌(Embedded)結構體的欄位。
  • 泛型型別推導增強:泛型函式在複合字面量、型別轉換以及 Channel 發送等賦值情境下,均可自動推導型別。

工具鏈改進(Tool Improvements)

  • go fix 現代化工具:新增 atomictypes、embedlit、slicesbackward 與 unsafefuncs 等重構規則。
  • go doc 查詢擴充:支援使用 go doc package@version 語法直接查詢特定版本的文件。
  • go mod tidy 整理:自動將 go.mod 中的多個 require 區塊整理為標準的「直接依賴」與「間接依賴」兩個區塊。

效能與 Runtime

  • 記憶體分配優化:針對 <80B 的小型物件採用尺寸優化的記憶體分配策略,分配成本降低高達 30%。
  • Goroutine 洩漏檢測:runtime/pprof 中的 goroutineleak 分析工具正式進入 GA(General Availability),可自動偵測永久阻塞的 Goroutine。

標準庫重大新增(Standard Library)

  • encoding/json/v2:提供全新的高階 JSON 處理套件(以及低階串流套件 encoding/json/jsontext),傳統 encoding/json 底層也已替換為 v2 以提升效能。
  • 原生 UUID 支援:新增 uuid 標準套件,支援生成與解析 UUID。
  • 後量子加密(PQ Security):新增 crypto/mldsa(符合 FIPS 204 的 ML-DSA 簽章方案),並整合至 crypto/x509 與 crypto/tls。
  • 實驗性 SIMD 支援:新增 simd 與架構專用的 simd/archsimd 套件。
  • 測試強化:net/http/httptest 新增 NewTestServer,提供適合配合 testing/synctest 使用的記憶體虛擬網路。

留言