Next Release Notes Draft

DRAFT RELEASE NOTES — Introduction to Go 1.26

Go 1.26 is not yet released. These are work-in-progress release notes. Go 1.26 is expected to be released in February 2026.

Changes to the language

The built-in new function, which creates a new variable, now allows its operand to be an expression, specifying the initial value of the variable.

This feature is particularly useful when working with serialization packages such as encoding/json or protocol buffers that use a pointer to represent an optional value, as it enables an optional field to be populated in a simple expression, for example:

import "encoding/json"

type Person struct {
    Name string   `json:"name"`
    Age  *int     `json:"age"` // age if known; nil otherwise
}

func personJSON(name string, age int) ([]byte, error) {
    return json.Marshal(Person{
        Name: name,
        Age:  new(age),
    })
}

Tools

Go command

cmd/doc, and go tool doc have been deleted. go doc can be used as a replacement for go tool doc: it takes the same flags and arguments and has the same behavior.

Bootstrap

As mentioned in the Go 1.24 release notes, Go 1.26 now requires Go 1.24.6 or later for bootstrap. We expect that Go 1.28 will require a minor release of Go 1.26 or later for bootstrap.

Standard library

Minor changes to the library

go/types

The Var.Kind method returns an enumeration of type VarKind that classifies the variable (package-level, local, receiver, parameter, result, or struct field). See issue #70250.

Callers of NewVar or NewParam are encouraged to call Var.SetKind to ensure that this attribute is set correctly in all cases.

crypto/ecdsa

The big.Int fields of PublicKey and PrivateKey are now deprecated.

crypto/rsa

If PrivateKey fields are modified after calling PrivateKey.Precompute, PrivateKey.Validate now fails.

PrivateKey.D is now checked for consistency with precomputed values, even if it is not used.

database/sql/driver

A database driver may implement RowsColumnScanner to entirely override Scan behavior.

errors

The new AsType function is a generic version of As. It is type-safe, faster, and, in most cases, easier to use.

image/jpeg

The JPEG encoder and decoder have been replaced with new, faster, more accurate implementations. Code that expects specific bit-for-bit outputs from the encoder or decoder may need to be updated.

log/slog

The NewMultiHandler function creates a MultiHandler that invokes all the given Handlers. Its Enable method reports whether any of the handlers’ Enabled methods return true. Its Handle, WithAttr and WithGroup methods call the corresponding method on each of the enabled handlers.

net

Added context aware dial functions for TCP, UDP, IP and Unix networks.

net/http

The new HTTP2Config.StrictMaxConcurrentRequests field controls whether a new connection should be opened if an existing HTTP/2 connection has exceeded its stream limit.

net/http/httptest

The HTTP client returned by Server.Client will now redirect requests for example.com and any subdomains to the server being tested.

net/http/httputil

The ReverseProxy.Director configuration field is deprecated in favor of ReverseProxy.Rewrite.

A malicious client can remove headers added by a Director function by designating those headers as hop-by-hop. Since there is no way to address this problem within the scope of the Director API, we added a new Rewrite hook in Go 1.20. Rewrite hooks are provided with both the unmodified inbound request received by the proxy and the outbound request which will be sent by the proxy.

Since the Director hook is fundamentally unsafe, we are now deprecating it.

net/netip

The new Prefix.Compare method compares two prefixes.

os

The new Process.WithHandle method provides access to an internal process handle on supported platforms (Linux 5.4 or later and Windows). On Linux, the process handle is a pidfd. The method returns ErrNoHandle on unsupported platforms or when no process handle is available.

On Windows, the OpenFile flag parameter can now contain any combination of Windows-specific file flags, such as FILE_FLAG_OVERLAPPED and FILE_FLAG_SEQUENTIAL_SCAN, for control of file or device caching behavior, access modes, and other special-purpose flags.

testing

The new methods T.ArtifactDir, B.ArtifactDir, and F.ArtifactDir return a directory in which to write test output files (artifacts).

When the -artifacts flag is provided to go test, this directory will be located under the output directory (specified with -outputdir, or the current directory by default). Otherwise, artifacts are stored in a temporary directory which is removed after the test completes.

The first call to ArtifactDir when -artifacts is provided writes the location of the directory to the test log.

For example, in a test named TestArtifacts, t.ArtifactDir() emits:

=== ARTIFACTS Test /path/to/artifact/dir

Ports

Windows

As announced in the Go 1.25 release notes, the broken 32-bit windows/arm port (GOOS=windows GOARCH=arm) is removed.