Stable Release in branch 1.17
1.17.13
Released 01 Aug 2022
(4 years ago)
SoftwareGo
Version1.17
Status
End of life
Initial release1.17
16 Aug 2021
(5 years ago)
Latest release1.17.13
01 Aug 2022
(4 years ago)
End of life02 Aug 2022
(Ended 4 years ago)
Release noteshttps://go.dev/doc/go1.17
Source codehttps://github.com/golang/go/tree/go1.17.13
Documentationhttps://go.dev/doc/
Go 1.17 ReleasesView full list

What Is New in Go 1.17

Category Key Changes
Language New slice to array pointer conversion, unsafe.Add, unsafe.Slice
Compiler New calling convention, faster stack tracing, smaller binaries
Libraries New io package interfaces, net/http timeouts, TLS 1.3 improvements
Tools go run accepts executables, improved testing, GOROOT detection
Ports Windows ARM64 support, FreeBSD AArch64, macOS on Apple Silicon

What language changes does Go 1.17 introduce?

Go 1.17 adds three specific conversions to the language specification. The most significant change allows converting a slice to an array pointer, which gives you direct access to the underlying array of a slice.

This conversion requires that the slice is long enough to fill the entire array, otherwise it panics at runtime. In practice, this provides a safer alternative to using unsafe pointer arithmetic to access slice data.

s := make([]byte, 2, 4)
arrptr := (*[2]byte)(s)  // Now valid in 1.17

How does the new calling convention improve performance?

The compiler now uses a register-based calling convention on x86-64 platforms instead of passing all arguments on the stack. This change results in significant performance improvements for function calls.

Benchmarks show approximately 5% faster execution and 2% smaller binary sizes for typical Go programs. The calling convention follows a similar approach to other modern compiled languages, making Go more competitive in performance-critical applications.

What library improvements should developers know about?

The io package introduces new interfaces io.StringWriter and io.ByteWriter that make it easier to write generic code for different output types. The net/http package adds better timeout handling with the ResponseController type.

TLS 1.3 support sees improvements with better session ticket rotation and more efficient handshakes. These changes make Go's HTTP server more robust for production workloads without requiring external dependencies.

What tooling enhancements came with this release?

The go run command now accepts built executables as arguments, making it easier to run pre-built Go programs directly. Testing improvements include better support for test binaries and more accurate code coverage reporting.

GOROOT detection became more reliable, especially for installations outside the standard location. These tooling changes streamline the development workflow, particularly for complex projects with multiple build artifacts.

FAQ

Does the new slice-to-array-pointer conversion work with any slice type?
Yes, it works with slices of any type, but the array type must match the slice's element type. The conversion requires that the slice length is at least as long as the array length to avoid runtime panics.

Will my existing code break with the new register-based calling convention?
No, the calling convention change is backward compatible. The Go team ensured that all existing code continues to work without modification, as the new convention only affects how functions are called internally by the compiler.

What's the practical benefit of the new io.StringWriter interface?
It allows writing functions that accept any writer that can write strings efficiently, without needing type assertions. This is particularly useful for writing utility functions that work with both bytes.Buffer and strings.Builder.

Does the Windows ARM64 support mean I can compile for Surface Pro X?
Yes, Go 1.17 adds full support for compiling and running Go programs on Windows ARM64 devices like the Surface Pro X. This includes both 64-bit ARM architecture and the necessary Windows system call interfaces.

How do the TLS 1.3 improvements affect existing HTTPS servers?
The TLS 1.3 session ticket rotation improvements enhance security without breaking existing clients. Servers automatically benefit from more secure session resumption while maintaining compatibility with all TLS 1.3 compliant clients.

Releases In Branch 1.17

VersionRelease date
1.17.1301 Aug 2022
(4 years ago)
1.17.1212 Jul 2022
(4 years ago)
1.17.1101 Jun 2022
(4 years ago)
1.17.1010 May 2022
(4 years ago)
1.17.912 Apr 2022
(4 years ago)
1.17.803 Mar 2022
(4 years ago)
1.17.709 Feb 2022
(4 years ago)
1.17.606 Jan 2022
(4 years ago)
1.17.509 Dec 2021
(4 years ago)
1.17.402 Dec 2021
(4 years ago)
1.17.304 Nov 2021
(4 years ago)
1.17.207 Oct 2021
(4 years ago)
1.17.109 Sep 2021
(4 years ago)
1.1716 Aug 2021
(5 years ago)
1.17rc202 Aug 2021
(5 years ago)
1.17rc113 Jul 2021
(5 years ago)
1.17beta110 Jun 2021
(5 years ago)