February 25, 2019
Go 1.12 makes no language changes but improves the toolchain: opt-in TLS 1.3, a now-mandatory build cache, better module support outside module directories, faster GC sweeping and more aggressive memory release, and a rewritten go vet. It's also the last release supporting FreeBSD 10.x, macOS 10.10, and binary-only packages.
No changes to the language specification in Go 1.12.
TLS 1.3 (RFC 8446) added to crypto/tls as opt-in via GODEBUG=tls13=1; will be on by default in Go 1.13.
go vet rewritten as a base for pluggable analysis tools; go tool vet removed, and the experimental -shadow option is gone.
Build cache is now required; setting GOCACHE=off breaks commands that need to write to the cache.
Module support improved: go command works outside a module directory when GO111MODULE=on, concurrent module downloads/extraction are now safe, and replace directives are consulted before the module cache/network.
go.mod now records a go directive indicating language version; modules built with 1.12 can fail on Go 1.11 through 1.11.3 (1.11.4+ is fine).
Runtime improvements: faster GC sweeping under high live-heap fraction, more aggressive memory release to the OS, and Linux now uses MADV_FREE (raises reported RSS; revert with GODEBUG=madvdontneed=1).
Compiler inlines more functions by default, so code walking runtime.Callers results must switch to runtime.CallersFrames; method-expression wrapper frames are also no longer shown in stack traces.
New/changed ports: race detector on linux/arm64, cgo on linux/ppc64, new windows/arm port, and new (partial) aix/ppc64 support.
godoc no longer has a command-line interface (use go doc, which gains -all and -src flags); Go 1.12 is the last release bundling the godoc webserver.
net package now enables Happy Eyeballs (RFC 6555) and TCP keep-alives by default, deprecating Dialer.DualStack.
Last release supporting FreeBSD 10.x, macOS 10.10 Yosemite, and binary-only packages; also last release before mangled cgo names are rejected.