| # Go 1.8 is released |
| 16 Feb 2017 |
| Summary: Go 1.8 adds faster non-x86 compiled code, sub-millisecond garbage collection pauses, HTTP/2 push, and more. |
| |
| Chris Broadfoot |
| cbro@golang.org |
| |
| ## |
| |
| Today the Go team is happy to announce the release of Go 1.8. |
| You can get it from the [download page](https://golang.org/dl/). |
| There are significant performance improvements and changes across the standard library. |
| |
| The compiler back end introduced in [Go 1.7](https://blog.golang.org/go1.7) for 64-bit x86 is now used |
| on all architectures, and those architectures should see significant [performance improvements](https://golang.org/doc/go1.8#compiler). |
| For instance, the CPU time required by our benchmark programs was reduced by 20-30% on 32-bit ARM systems. |
| There are also some modest performance improvements in this release for 64-bit x86 systems. |
| The compiler and linker have been made faster. |
| Compile times should be improved by about 15% over Go 1.7. |
| There is still more work to be done in this area: expect faster compilation speeds in future releases. |
| |
| Garbage collection pauses should be [significantly shorter](https://golang.org/doc/go1.8#gc), |
| usually under 100 microseconds and often as low as 10 microseconds. |
| |
| The HTTP server adds support for [HTTP/2 Push](https://golang.org/doc/go1.8#h2push), |
| allowing servers to preemptively send responses to a client. |
| This is useful for minimizing network latency by eliminating roundtrips. |
| The HTTP server also adds support for [graceful shutdown](https://golang.org/doc/go1.8#http_shutdown), |
| allowing servers to minimize downtime by shutting down only after serving all requests that are in flight. |
| |
| [Contexts](https://golang.org/pkg/context/) (added to the standard library in Go 1.7) |
| provide a cancelation and timeout mechanism. |
| Go 1.8 [adds](https://golang.org/doc/go1.8#more_context) support for contexts in more parts of the standard library, |
| including the [`database/sql`](https://golang.org/pkg/database/sql) and [`net`](https://golang.org/pkg/net) packages |
| and [`Server.Shutdown`](http://beta.golang.org/pkg/net/http/#Server.Shutdown) in the `net/http` package. |
| |
| It's now much simpler to sort slices using the newly added [`Slice`](https://golang.org/pkg/sort/#Slice) |
| function in the `sort` package. For example, to sort a slice of structs by their `Name` field: |
| |
| sort.Slice(s, func(i, j int) bool { return s[i].Name < s[j].Name }) |
| |
| Go 1.8 includes many more additions, improvements, and fixes. |
| Find the complete set of changes, and more information about the improvements listed above, in the |
| [Go 1.8 release notes](https://golang.org/doc/go1.8.html). |
| |
| To celebrate the release, Go User Groups around the world are holding [release parties](https://github.com/golang/go/wiki/Go-1.8-release-party) this week. |
| Release parties have become a tradition in the Go community, so if you missed out this time, keep an eye out when 1.9 nears. |
| |
| Thank you to over 200 contributors who helped with this release. |