blob: 4c0edf31fc64cf53ec1c1657cb299437a55260da [file] [log] [blame]
# Go 1.17 is released
16 Aug 2021
Summary: Go 1.17 adds performance improvements, module optimizations, arm64 on Windows, and more.
Matt Pearring
Alex Rakoczy
##
Today the Go team is thrilled to release Go 1.17, which you can get by visiting the
[download page](https://golang.org/dl/).
This release brings additional improvements to the compiler, namely a
[new way of passing function arguments and results](https://golang.org/doc/go1.17#compiler).
This change has shown about a 5% performance improvement in Go programs and reduction in binary
sizes of around 2% for amd64 platforms. Support for more platforms will come in future releases.
Go 1.17 also adds support for the
[64-bit ARM architecture on Windows](https://golang.org/doc/go1.17#ports), letting gophers run
Go natively on more devices.
Weve also introduced [pruned module graphs](https://golang.org/doc/go1.17#go-command) in this
release. Modules that specify `go 1.17` or higher in their `go.mod` file will have their module graphs
include only the immediate dependencies of other Go 1.17 modules, not their full transitive
dependencies. This should help avoid the need to download or read `go.mod` files for otherwise
irrelevant dependencies—saving time in everyday development.
Go 1.17 comes with three small [changes to the language](https://golang.org/doc/go1.17#language).
The first two are new functions in the `unsafe` package to make it simpler for programs to conform
to the `unsafe.Pointer` rules: `unsafe.Add` allows for
[safer pointer arithmetic](https://golang.org/pkg/unsafe#Add), while `unsafe.Slice` allows for
[safer conversions of pointers to slices](https://golang.org/pkg/unsafe#Slice). The third change is
an extension to the language type conversion rules to allow conversions from
[slices to array pointers](https://golang.org/ref/spec#Conversions_from_slice_to_array_pointer),
provided the slice is at least as large as the array at runtime.
Finally there are quite a few other improvements and bug fixes, including verification improvements
to [crypto/x509](https://golang.org/doc/go1.17#crypto/x509), and alterations to
[URL query parsing](https://golang.org/doc/go1.17#semicolons). For a complete list of changes and
more information about the improvements above, see the
[full release notes](https://golang.org/doc/go1.17).
Thanks to everyone who contributed to this release by writing code, filing bugs, sharing feedback,
and testing the beta and release candidates. Your efforts helped to ensure that Go 1.17 is as stable
as possible. As always, if you notice any problems, please
[file an issue](https://golang.org/issue/new).
We hope you enjoy the new release!