Go 1.27 Adds Generic Methods and a Stricter JSON Package
The latest six-month release lets methods carry their own type parameters for the first time, ships a redesigned encoding/json/v2, and adds post-quantum signatures to the crypto package.
Go 1.27 shipped on August 19, 2026, six months after Go 1.26, keeping the project's standard release cadence. The release mixes one notable language change with several new and reworked standard-library packages.
The language change is generic methods: a method can now declare its own type parameters, something previously only possible at the package-function level. The Go team's own example is in math/rand/v2, where a method like (r *Rand) N[Int intType](n Int) Int can be generic over the integer type it returns. One limitation carries over from the design: interface methods still can't declare type parameters, so this doesn't yet extend to interface-based generic dispatch.
The standard library's biggest addition is encoding/json/v2, packaged with a companion encoding/json/jsontext, offering a major, configurable revision of JSON handling with stricter defaults — it rejects invalid UTF-8 and duplicate object keys where the original package would silently accept them — and noticeably faster Unmarshal performance. Teams that need to check compatibility before adopting it can roll back to the old behavior with GOEXPERIMENT=nojsonv2.
Go 1.27 also adds post-quantum cryptography support: a new crypto/mldsa package implements FIPS 204 ML-DSA digital signatures, wired into both crypto/x509 for certificates and crypto/tls, where MLDSA44/65/87 are now usable cipher options in TLS 1.3.
On performance, size-specialized memory allocation for small objects (under 80 bytes) cuts allocation cost by up to 30%, translating to roughly a 1% speedup across allocation-heavy programs generally, at the cost of about 60KB of added binary size. A new goroutineleak profile, now generally available in pprof, detects goroutines permanently blocked on channels, mutexes, or other concurrency primitives — a common and previously hard-to-diagnose class of bug.
Go 1.27 also introduces a native uuid package, experimental portable simd and simd/archsimd packages for explicit vectorized code, and drops support for macOS versions before Ventura (13). Full release notes are on the Go project's own site.
Source: Go.dev — Go 1.27 Release Notes
