DRAFT RELEASE NOTES — Introduction to Go 1.19

Go 1.19 is not yet released. These are work-in-progress release notes. Go 1.19 is expected to be released in August 2022.

Changes to the language

TODO: complete this section

Ports

TODO: complete this section, or delete if not needed

Tools

TODO: complete this section, or delete if not needed

Go command

TODO: complete this section.

The -trimpath flag, if set, is now included in the build settings stamped into Go binaries by go build, and can be examined using go version -m or debug.ReadBuildInfo.

go generate now sets the GOROOT environment variable explicitly in the generator's environment, so that generators can locate the correct GOROOT even if built with -trimpath.

New unix build constraint

The build constraint unix is now recognized in //go:build lines. The constraint is satisfied if the target operating system, also known as GOOS, is a Unix or Unix-like system. For the 1.19 release it is satisfied if GOOS is one of aix, android, darwin, dragonfly, freebsd, hurd, illumos, ios, linux, netbsd, openbsd, or solaris. In future releases the unix constraint may match additional newly supported operating systems.

Runtime

TODO: complete this section, or delete if not needed

Compiler

The compiler now uses a jump table to implement large integer and string switch statements. Performance improvements for the switch statement vary but can be on the order of 20% faster. (GOARCH=amd64 and GOARCH=arm64 only)

TODO: complete this section, or delete if not needed

Linker

TODO: complete this section, or delete if not needed

Core library

TODO: complete this section

Minor changes to the library

As always, there are various minor changes and updates to the library, made with the Go 1 promise of compatibility in mind.

TODO: complete this section

crypto/tls

The tls10default GODEBUG option has been removed. It is still possible to enable TLS 1.0 client-side by setting Config.MinVersion.

image/draw

Draw with the Src operator preserves non-premultiplied-alpha colors when destination and source images are both *image.NRGBA (or both *image.NRGBA64). This reverts a behavior change accidentally introduced by a Go 1.18 library optimization, to match the behavior in Go 1.17 and earlier.

net

The pure Go resolver will now use EDNS(0) to include a suggested maximum reply packet length, permitting reply packets to contain up to 1232 bytes (the previous maximum was 512). In the unlikely event that this causes problems with a local DNS resolver, setting the environment variable GODEBUG=netdns=cgo to use the cgo-based resolver should work. Please report any such problems on the issue tracker.

When a net package function or method returns an "I/O timeout" error, the error will now satisfy errors.Is(err, context.DeadlineExceeded). When a net package function returns an "operation was canceled" error, the error will now satisfy errors.Is(err, context.Canceled). These changes are intended to make it easier for code to test for cases in which a context cancellation or timeout causes a net package function or method to return an error, while preserving backward compatibility for error messages.

os/exec

An exec.Cmd with a non-empty Dir and a nil Env now implicitly sets the PWD environment variable for the subprocess to match Dir.

The new method (*exec.Cmd).Environ reports the environment that would be used to run the command, including the aforementioned PWD variable.

reflect

reflect.SliceHeader and reflect.StringHeader are now deprecated, and their use should be avoided.

runtime

The GOROOT function now returns the empty string (instead of "go") when the binary was built with the -trimpath flag set and the GOROOT variable is not set in the process environment.

runtime/race

The race detector has been updgraded to use thread sanitizer version v3.

strconv

strconv.Quote and related functions now quote the rune 007F as \x7f, not \u007f.