← All releases

go1.7.0

Major

August 15, 2016

Go 1.7 brings a new SSA-based amd64 compiler backend that cuts CPU time 5-35% and shrinks binaries up to 20-30%, promotes the context package into the standard library, finalizes vendoring, and adds subtests/sub-benchmarks to testing—mostly toolchain and library work with one trivial language spec clarification.

highlights
  • New SSA-based 64-bit x86 compiler backend generates more efficient code, cutting benchmark CPU time 5-35% (can be disabled with -ssa=0)

  • context package promoted from x/net into the standard library and wired into net, net/http, and os/exec

  • Vendoring support (started in Go 1.5) is now a permanent, standard go command feature; GO15VENDOREXPERIMENT env var removed

  • testing package now supports subtests and sub-benchmarks, enabling table-driven tests and shared setup/teardown

  • go vet adds a -lostcancel check for unreleased context cancel funcs and a -tests check for malformed test functions

  • Compiler now writes package export metadata in a compact binary format instead of text (revert with -newexport=0)

  • Resulting binaries are typically smaller than Go 1.6's, sometimes by 20-30%, and the compiler/linker run noticeably faster

  • New experimental ports: linux/s390x and the start of plan9/arm; linux/mips64(le) gain full cgo and external linking support; macOS 10.12 Sierra supported (older Go binaries need rebuilding for it)

  • go tool trace overhead drops from ~400% to ~25%, and trace files now embed file/line info

  • Minor language spec clarification: a terminating statement list is now judged by its final non-empty statement, matching existing compiler behavior

  • New net/http/httptrace package for tracing events within individual HTTP requests

  • crypto/tls now ramps up record sizes gradually for lower latency and adds limited support for server-initiated renegotiation