← All releases

go1.12.0

Major

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.

highlights
  • 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.