.Go Toolset provided in version 1.23
RHEL 10.0 provides Go Toolset in version 1.23. Notable enhancements include:
* The `for-range` loop accepts iterator functions of the following types:
** `func(func() bool)`
** `func(func(K) bool)`
** `func(func(K, V) bool)`
+
Calls of the iterator argument function create the iteration values for the `for-range` loop. For reference links, see the link:
https://tip.golang.org/doc/go1.23[upstream release notes].
* The Go Toolchain can collect usage and breakage statistics to help the Go team to understand how the Go Toolchain is used and working. By default, Go Telemetry does not upload telemetry data and stores it only locally. For further information, see the link:
https://tip.golang.org/doc/telemetry[upstream Go Telemetry documentation].
* The `go vet` sub-command includes the `stdversion` analyzer which flags references to symbols that are too new for the version of Go you use in the referring file.
* The `cmd` and `cgo` features support the `-ldflags` option to pass flags to the C linker. The `go` command uses this flag automatically to avoid `argument list too long` errors when you use a very large `CGO_LDFLAGS` environment variable.
* The `trace` utility tolerates partially broken traces and attempts to recover the trace data. This is especially useful in case of crashes, because you can get the trace leading up to the crash.
* The traceback printed by the runtime after an unhandled panic or other fatal error carries indentation to distinguish the stack trace of the `goroutine` from the first `goroutine`.
* The compiler build time overhead of using profile-guided optimization was reduced to single-digit percentage.
* The new `-bindnow` linker flag enables immediate function binding when building a dynamically-linked ELF binary.
* The `//go:linkname` linker directive no longer refer to internal symbols in the standard library and the runtime that are not marked with `//go:linkname` on their definition.
* If a program no longer refers to a `Timer` or `Ticker`, garbage collection cleans them up immediately even if their `Stop` method has not been called. The timer channel associated with a `Timer` or `Ticker` is now unbuffered with capacity 0. This ensures that, every time a `Reset` or `Stop` method is called, no stale values are not sent or received after the call.
* The new `unique` package provides facilities for canonicalizing values, such as `interning` or `hash-consing`.
* The new `iter` package provides the basic definitions to work with user-defined iterators.
* The `slices` and `maps` packages introduce several new functions that work with iterators.
* The new `structs` package provides types for struct fields that modify properties of the containing struct type, such as memory layout.
* Minor changes are made in the following packages:
** `archive/tar`
** `crypto/tls`
** `crypto/x509`
** `database/sql`
** `debug/elf`
** `encoding/binary`
** `go/ast`
** `go/types`
** `math/rand/v2`
** `net`
** `net/http`
** `net/http/httptest`
** `net/netips`
** `path/filepath`
** `reflect`
** `runtime/debug`
** `runtime/pprof`
** `runtime/trace`
** `slices`
** `sync`
** `sync/atomic`
** `syscall`
** `testing/fstest`
** `text/template`
** `time`
** `unicode/utf16`
For more information, see the link:
https://tip.golang.org/doc/go1.23[upstream release notes].
Go Toolset is a rolling Application Stream, and Red Hat supports only the latest version. For more information, see the link:
https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle[Red Hat Enterprise Linux Application Streams Life Cycle] document.