Go 1.19, an update of the Google-developed programming language due in August, introduces a revised memory model and new types that make it easier to use atomic values. Now in a preview stage, Go 1.19 can be downloaded from go.dev. The release is still considered unstable at this point.
The Go memory model specifies conditions under which reads of a variable in one goroutine can be guaranteed to observe values produced by writes to the same variable in a different goroutine. Go only provides sequentially consistent atomics, not any of more relaxed forms offered in other languages.
Go 1.19 also introduces a “small” change to the language, consisting of a correction to the scope of type parameters in method declarations. Existing programs are unaffected. Go 1.19 follows the momentous release in March of Go 1.18, which featured long-sought generics capabilities.
Specific to other new features and improvements in Go 1.19, the runtime now includes support for a soft memory limit.
The limit includes the Go heap and other memory managed by the runtime and excludes external memory sources such as mappings of the binary, memory managed in other languages, and memory held by the OS on behalf of the Go program. Also, the runtime now schedules fewer GC worker routines on idle OS threads when the application is idle enough to force a periodic GC cycle.
Meanwhile, 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 per cent faster.
In addition, the release supports links, lists, and clearer headings in doc comments plus the build constraint,
unix, is now recognised in
//go:build lines. Also, support is added for the Loongson 64-bit architecture LoongArch on Linux.