觀點 · 資訊分享
Go 1.27 釋出:終於支援泛型方法,encoding/json 底層換成 v2,goroutine 洩漏偵測轉正式
Go 1.27 在 8 月 19 日釋出。語言新增泛型方法,encoding/json 改由 v2 實作支撐、解碼明顯變快,goroutine 洩漏偵測轉為正式功能,也新增 uuid 與後量子簽章套件。
- 發布
- 2026-08-19
- 篇幅
- 約 4 分鐘 · 1,790 字
- 結構
- 9 節 + 3 題常見問題
- 標籤

一句話看懂:Go 1.27 釋出,語言終於支援「泛型方法」,encoding/json 底層換成 v2 實作,goroutine 洩漏偵測也轉為正式功能;官方說相容性承諾不變,但有幾個升級要注意的地方。

先用白話講:Go 是什麼?為什麼每半年看一次?
Go 是 Google 設計的程式語言,後端服務、雲端工具、命令列程式很常用它。它大約每半年釋出一個新版本,像是「每年兩次的大保養」:不會把舊程式搞壞,但會加新功能、修效能。
發生什麼事
Go 團隊在 8 月 19 日釋出 Go 1.27,距 Go 1.26 約半年。官方說明這次維持 Go 1 的相容性承諾,預期幾乎所有程式照樣編譯與執行;改動大多在工具鏈、執行階段與標準庫。下面挑最值得注意的幾項。
語言:終於有「泛型方法」
泛型就是「寫一次,適用多種型別」。以前 Go 的方法不能自己宣告型別參數,想要通用功能,只能寫成整個套件層級的函式。Go 1.27 讓方法本身可以帶型別參數,通用功能就能直接掛在資料型別上。官方的例子是 math/rand/v2 的 (*Rand).N。
限制是:介面的方法不能宣告型別參數,介面方法也不能由泛型方法實作。
// 示意:Go 1.27 起,方法可以宣告自己的型別參數
type Store struct{ data map[string]any }
func (s *Store) Get[T any](key string) (T, bool) {
v, ok := s.data[key].(T)
return v, ok
}
另外兩項小改動:結構字面值的鍵可以是任何有效的欄位選擇器;函式型別推論也擴大到更多情境。
標準庫:JSON 與新套件
encoding/json改由 v2 實作支撐:行為保留,但錯誤訊息文字可能不同;官方說明解碼明顯變快、編碼大致持平。遇到相容問題,可在建置時設GOEXPERIMENT=nojsonv2退回舊版(預期未來移除)- 新增
encoding/json/v2:預設更嚴格,會拒絕無效的 UTF-8 與物件中的重複欄位名稱 crypto/mldsa:後量子簽章 ML-DSA(FIPS 204),crypto/tls也支援 TLS 1.3 的 ML-DSA 簽章uuid:新增 UUID 產生與解析套件simd:實驗性的跨平台 SIMD 支援,需設GOEXPERIMENT=simd
執行階段與工具
| 範圍 | 變化 |
|---|---|
| goroutine 洩漏偵測 | goroutineleak profile 從實驗轉為正式,也有 /debug/pprof/goroutineleak 端點 |
| 記憶體配置 | 小於 80 位元組的配置部分最高加速 30%,真實程式預期約提升 1%,執行檔增加約 60 KB |
go test |
預設執行 stdversion 檢查,找出用了比 go.mod 版本更新的標準庫功能 |
go mod tidy |
go 1.27 以上的模組,會把重複的 require 區塊合併成最多兩個 |
go doc |
支援 package@version 寫法 |
升級前要注意
- macOS:需要 macOS 13 Ventura 以上
- bzr:
go指令不再支援 bzr 版本控制系統 - GODEBUG:
asynctimerchan設定永久移除,time套件的 channel 一律是無緩衝(同步) - gofmt:修正了跨 CPU 架構的對齊判斷,舊程式碼用新版 gofmt 可能出現少量空白變動
- HTTP/1:
Response.Body關閉時會自動排空未讀內容,通常有助於連線重用;若程式原本就設定了不當的連線池,可能看到效能變化
我的看法
我自己更在意的是「升級不要出事」。這次最需要檢查的是 JSON:許多專案的單元測試會比對錯誤訊息字串,換成 v2 實作後文字可能不同,測試就會紅燈。升級前,我會先在 CI 跑一輪,再決定要不要設 nojsonv2 過渡。
泛型方法則是讓程式碼更好寫的長期改善,但不必急著大改既有程式。goroutine 洩漏偵測我會很快試:長時間運行的服務最怕的就是慢慢變大的記憶體,這個 profile 剛好能補一塊。要提醒的是,官方也說它無法偵測所有情況,不是萬靈丹。
名詞小辭典
- 泛型(Generics):寫一次程式,就能處理多種資料型別。
- goroutine:Go 的輕量級執行單位,一個程式可以同時開很多個。
- 後量子密碼(Post-Quantum):能抵抗未來量子電腦攻擊的加密與簽章演算法。
- SIMD:一個指令同時處理多筆資料,常用來加速運算。