# Go 1.7 is released
15 Aug 2016
Summary: Go 1.7 adds faster x86 compiled code, context in the standard library, and more.

Chris Broadfoot
cbro@golang.org

##

Today we are happy to announce the release of Go 1.7.
You can get it from the [download page](https://golang.org/dl/).
There are several significant changes in this release: a port for
[Linux on IBM z Systems](https://en.wikipedia.org/wiki/IBM_System_z) (s390x),
compiler improvements, the addition of the [context](https://golang.org/pkg/context/) package,
and support for [hierarchical tests and benchmarks](https://golang.org/pkg/testing/#hdr-Subtests_and_Sub_benchmarks).

A new compiler back end, based on [static single-assignment](https://en.wikipedia.org/wiki/Static_single_assignment_form) form (SSA),
has been under development for the past year.
By representing a program in SSA form, a compiler may perform advanced optimizations more easily.
This new back end generates more compact, more efficient code that includes
optimizations like
[bounds check elimination](https://en.wikipedia.org/wiki/Bounds-checking_elimination) and
[common subexpression elimination](https://en.wikipedia.org/wiki/Common_subexpression_elimination).
We observed a 5–35% speedup across our [benchmarks](https://golang.org/test/bench/go1/).
For now, the new backend is only available for the 64-bit x86 platform ("amd64"),
but we’re planning to convert more architecture backends to SSA in future releases.

The compiler front end uses a new, more compact export data format, and
processes import declarations more efficiently.
While these [changes across the compiler toolchain](https://golang.org/doc/go1.7#compiler) are mostly invisible,
users have [observed](http://dave.cheney.net/2016/04/02/go-1-7-toolchain-improvements)
a significant speedup in compile time and a reduction in binary size by as much as 20–30%.

Programs should run a bit faster due to speedups in the garbage collector and optimizations in the standard library.
Programs with many idle goroutines will experience much shorter garbage collection pauses than in Go 1.6.

Over the past few years, the [golang.org/x/net/context](https://godoc.org/golang.org/x/net/context/)
package has proven to be essential to many Go applications.
Contexts are used to great effect in applications related to networking, infrastructure, and microservices
(such as [Kubernetes](http://kubernetes.io/) and [Docker](https://www.docker.com/)).
They make it easy to enable cancelation, timeouts, and passing request-scoped data.
To make use of contexts within the standard library and to encourage more extensive use,
the package has been moved from the [x/net](https://godoc.org/golang.org/x/net/context/) repository
to the standard library as the [context](https://golang.org/pkg/context/) package.
Support for contexts has been added to the
[net](https://golang.org/pkg/net/),
[net/http](https://golang.org/pkg/net/http/), and
[os/exec](https://golang.org/pkg/os/exec/) packages.
For more information about contexts, see the [package documentation](https://golang.org/pkg/context)
and the Go blog post [_Go Concurrency Patterns: Context_](https://blog.golang.org/context).

Go 1.5 introduced experimental support for a ["vendor" directory](https://golang.org/cmd/go/#hdr-Vendor_Directories),
enabled by the `GO15VENDOREXPERIMENT` environment variable.
Go 1.6 enabled this behavior by default, and in Go 1.7, this switch has been removed and the "vendor" behavior is always enabled.

Go 1.7 includes many more additions, improvements, and fixes.
Find the complete set of changes, and details of the points above, in the
[Go 1.7 release notes](https://golang.org/doc/go1.7.html).

Finally, the Go team would like thank everyone who contributed to the release.
170 people contributed to this release, including 140 from the Go community.
These contributions ranged from changes to the compiler and linker, to the standard library, to documentation, and code reviews.
We welcome contributions; if you'd like to get involved, check out the
[contribution guidelines](https://golang.org/doc/contribute.html).
