Eli Bendersky, on behalf of the Go team


21 June 2023

The Go 1.21 first Release Candidate (RC) is available today on the download
page
! Go 1.21 is packed with new features and improvements.
Getting the RC (release candidate) allows you to experiment with it early, try
it on your workloads, and report any issues before the final release (scheduled
for August). Here are some notable changes and features in Go 1.21; for the full
list, refer to the full release notes.

(Please note that the first RC for Go 1.21 is called go1.21rc2
because a bug was found and fixed after tagging go1.21rc1)

  • The Profile Guided Optimization (PGO) feature we announced for preview in
    1.20
    is now generally available! If a file named
    default.pgo is present in the main package’s directory, the go command
    will use it to enable a PGO build. See the PGO documentation for
    more details. We’ve measured the impact of PGO on a wide set of Go programs and
    see performance improvements of 2-7%.
  • The go tool now supports backward
    and forward language compatibility.

Language changes

  • New built-in functions: min, max
    and clear.
  • Several improvements to type inference for generic functions. The description of
    type inference in the spec
    has been expanded and clarified.
  • In a future version of Go we’re planning to address one of the most common
    gotchas of Go programming:
    loop variable capture.
    Go 1.21 comes with a preview of this feature that you can enable in your code
    using an environment variable. See this LoopvarExperiment wiki
    page
    for more details.

Standard library additions

  • New log/slog package for structured logging.
  • New slices package for common operations
    on slices of any element type. This includes sorting functions that are generally
    faster and more ergonomic than the sort package.
  • New maps package for common operations on maps
    of any key or element type.
  • New cmp package with new utilities for comparing
    ordered values.

Improved performance

In addition to the performance improvements when enabling PGO:

  • The Go compiler itself has been rebuilt with PGO enabled for 1.21, and as a
    result it builds Go programs 2-4% faster, depending on the host architecture.
  • Due to tuning of the garbage collector, some applications may see up to a 40%
    reduction in tail latency.
  • Collecting traces with runtime/trace now
    incurs a substantially smaller CPU cost on amd64 and arm64.

A new port to WASI

Go 1.21 adds an experimental port for WebAssembly System Interface (WASI),
Preview 1 (GOOS=wasip1, GOARCH=wasm).

To facilitate writing more general WebAssembly (WASM) code, the compiler also
supports a new directive for importing functions from the WASM host:
go:wasmimport.

Please download the Go 1.21 RC and try it! If you notice any
problems, please file an issue.

Read More