Go 1.27.0
I upgraded a couple of small production services to Go 1.27.0 the day it shipped, and this is the release I have been waiting for. The headline is generic methods — the language finally lets a method declaration carry its own type parameters, six months after Go 1.26. Verdict: this one is worth the upgrade.
The Big One: Generic Methods
For years, adding a generic helper that strictly belonged to a type meant declaring it at package scope. Go 1.27 changes that. A method may now declare its own type parameters, which keeps generic operations inside the namespace of the type they serve. The standard library already leans on it: math/rand/v2 now ships a generic method (*Rand) N[Int intType](Int) Int where it previously had a plain package-level function. Interface methods still cannot declare type parameters, so the change stays contained.
A Faster Standard Library
Two new packages caught my eye immediately. First, encoding/json/v2 plus encoding/json/jsontext deliver a major revision of the JSON story — stricter defaults (rejecting invalid UTF-8 and duplicate object keys), variadic Options, and meaningfully faster unmarshaling. If you hit a compatibility hiccup, GOEXPERIMENT=nojsonv2 restores the old implementation. Second, the new uuid package lands in the standard library, so you no longer reach for a third-party module for the basics.
Post-Quantum Crypto Arrives
This release is crypto-heavy in the right way. There is a new crypto/mldsa package implementing ML-DSA per FIPS 204, plus ML-DSA support threaded through crypto/x509 and crypto/tls (including the MLDSA44/65/87 signature schemes in TLS 1.3). ML-KEM-1024 key exchange is now available too. If you maintain anything touching TLS, this is the forward-looking upgrade you want.
Runtime and Toolchain Wins
Small allocations under 80 bytes get up to 30% cheaper thanks to size-specialized allocators (about a 1% real-world gain, ~60 KB larger binaries). The goroutineleak profile type graduates from experiment to generally available. The asynctimerchan GODEBUG setting is removed permanently, and go tool trace -http now binds to localhost by default — a small but welcome security improvement. Meanwhile go doc gains package@version syntax and go mod tidy now merges duplicate require blocks cleanly.
What to Watch For
The breaking bits are mostly removals of long-ago-defaulted GODEBUG settings, so most code compiles untouched. Keep an eye on compress/flate output changing slightly (different DEFLATE encoding) and function-literal symbol names getting simpler. Update with go mod tidy and you should be through in minutes.