<!--{
	"Title": "Go 1.21 Release Notes",
	"Path":  "/doc/go1.21"
}-->

<!--
NOTE: In this document and others in this directory, the convention is to
set fixed-width phrases with non-fixed-width spaces, as in
<code>hello</code> <code>world</code>.
Do not send CLs removing the interior tags from such phrases.
-->

<style>
  main ul li { margin: 0.5em 0; }
</style>

<h2 id="introduction">Introduction to Go 1.21</h2>

<p>
  The latest Go release, version 1.21, arrives six months after <a href="/doc/go1.20">Go 1.20</a>.
  Most of its changes are in the implementation of the toolchain, runtime, and libraries.
  As always, the release maintains the Go 1 <a href="/doc/go1compat">promise of compatibility</a>;
  in fact, Go 1.21 <a href="#tools">improves upon that promise</a>.
  We expect almost all Go programs to continue to compile and run as before.
</p>

<p><!-- https://go.dev/issue/57631 -->
  Go 1.21 introduces a small change to the numbering of releases.
  In the past, we used Go 1.<i>N</i> to refer to both the overall Go language version and release family
  as well as the first release in that family.
  Starting in Go 1.21, the first release is now Go 1.<i>N</i>.0.
  Today we are releasing both the Go 1.21 language and its initial implementation, the Go 1.21.0 release.
  These notes refer to “Go 1.21”; tools like <code>go</code> <code>version</code> will report “<code>go1.21.0</code>”
  (until you upgrade to Go 1.21.1).
  See “<a href="/doc/toolchain#version">Go versions</a>” in the “Go Toolchains” documentation for details
  about the new version numbering.
</p>

<h2 id="language">Changes to the language</h2>

<p>
  Go 1.21 adds three new built-ins to the language.

  <ul>
    <li><!-- https://go.dev/issue/59488 -->
      The new functions <code>min</code> and <code>max</code> compute the
      smallest (or largest, for <code>max</code>) value of a fixed number
      of given arguments.
      See the language spec for
      <a href="/ref/spec#Min_and_max">details</a>.
    </li>
    <li><!-- https://go.dev/issue/56351 -->
      The new function <code>clear</code> deletes all elements from a
      map or zeroes all elements of a slice.
      See the language spec for
      <a href="/ref/spec#Clear">details</a>.
    </li>
  </ul>
</p>

<p><!-- https://go.dev/issue/57411 -->
  Package initialization order is now specified more precisely. The
  new algorithm is:
  <ul>
    <li>
      Sort all packages by import path.
    </li>
    <li>Repeat until the list of packages is empty:
      <ul>
        <li>
          Find the first package in the list for which all imports are
          already initialized.
        </li>
        <li>
          Initialize that package and remove it from the list.
        </li>
      </ul>
    </li>
  </ul>
  This may change the behavior of some programs that rely on a
  specific initialization ordering that was not expressed by explicit
  imports. The behavior of such programs was not well defined by the
  spec in past releases. The new rule provides an unambiguous definition.
</p>

<p>
  Multiple improvements that increase the power and precision of type inference have been made.
</p>
<ul>
  <li><!-- https://go.dev/issue/59338 -->
    A (possibly partially instantiated generic) function may now be called with arguments that are
    themselves (possibly partially instantiated) generic functions.
    The compiler will attempt to infer the missing type arguments of the callee (as before) and,
    for each argument that is a generic function that is not fully instantiated,
    its missing type arguments (new).
    Typical use cases are calls to generic functions operating on containers
    (such as <a href="/pkg/slices#IndexFunc">slices.IndexFunc</a>) where a function argument
    may also be generic, and where the type argument of the called function and its arguments
    are inferred from the container type.
    More generally, a generic function may now be used without explicit instantiation when
    it is assigned to a variable or returned as a result value if the type arguments can
    be inferred from the assignment.
  </li>
  <li><!-- https://go.dev/issue/60353, https://go.dev/issue/57192, https://go.dev/issue/52397, https://go.dev/issue/41176 -->
    Type inference now also considers methods when a value is assigned to an interface:
    type arguments for type parameters used in method signatures may be inferred from
    the corresponding parameter types of matching methods.
  </li>
  <li><!-- https://go.dev/issue/51593 https://go.dev/issue/39661 -->
    Similarly, since a type argument must implement all the methods of its corresponding constraint,
    the methods of the type argument and constraint are matched which may lead to the inference of
    additional type arguments.
  </li>
  <li><!-- https://go.dev/issue/58671 -->
    If multiple untyped constant arguments of different kinds (such as an untyped int and
    an untyped floating-point constant) are passed to parameters with the same (not otherwise
    specified) type parameter type, instead of an error, now type inference determines the
    type using the same approach as an operator with untyped constant operands.
    This change brings the types inferred from untyped constant arguments in line with the
    types of constant expressions.
  </li>
  <li><!-- https://go.dev/issue/59750 -->
    Type inference is now precise when matching corresponding types in assignments:
    component types (such as the elements of slices, or the parameter types in function signatures)
    must be identical (given suitable type arguments) to match, otherwise inference fails.
    This change produces more accurate error messages:
    where in the past type inference may have succeeded incorrectly and lead to an invalid assignment,
    the compiler now reports an inference error if two types can't possibly match.
  </li>
</ul>

<p><!-- https://go.dev/issue/58650 -->
  More generally, the description of
  <a href="/ref/spec#Type_inference">type inference</a>
  in the language spec has been clarified.
  Together, all these changes make type inference more powerful and inference failures less surprising.
</p>

<!-- https://go.dev/issue/57969 -->
<p>
  Go 1.21 includes a preview of a language change we are considering for a future version of Go:
  making for loop variables per-iteration instead of per-loop, to avoid accidental sharing bugs.
  For details about how to try that language change, see <a href="https://go.dev/wiki/LoopvarExperiment">the LoopvarExperiment wiki page</a>.
</p>

<!-- https://go.dev/issue/25448 -->
<p>
  Go 1.21 now defines that if a goroutine is panicking and recover was called directly by a deferred
  function, the return value of recover is guaranteed not to be nil. To ensure this, calling panic
  with a nil interface value (or an untyped nil) causes a run-time panic of type
  <a href="/pkg/runtime/#PanicNilError"><code>*runtime.PanicNilError</code></a>.
</p>
<p>
  To support programs written for older versions of Go, nil panics can be re-enabled by setting
  <code>GODEBUG=panicnil=1</code>.
  This setting is enabled automatically when compiling a program whose main package
  is in a module that declares <code>go</code> <code>1.20</code> or earlier.
</p>

<h2 id="tools">Tools</h2>
<p>
  Go 1.21 adds improved support for backwards compatibility and forwards compatibility
  in the Go toolchain.
</p>

<p><!-- https://go.dev/issue/56986 -->
  To improve backwards compatibility, Go 1.21 formalizes
  Go's use of the GODEBUG environment variable to control
  the default behavior for changes that are non-breaking according to the
  <a href="/doc/go1compat">compatibility policy</a>
  but nonetheless may cause existing programs to break.
  (For example, programs that depend on buggy behavior may break
  when a bug is fixed, but bug fixes are not considered breaking changes.)
  When Go must make this kind of behavior change,
  it now chooses between the old and new behavior based on the
  <code>go</code> line in the workspace's <code>go.work</code> file
  or else the main module's <code>go.mod</code> file.
  Upgrading to a new Go toolchain but leaving the <code>go</code> line
  set to its original (older) Go version preserves the behavior of the older
  toolchain.
  With this compatibility support, the latest Go toolchain should always
  be the best, most secure, implementation of an older version of Go.
  See “<a href="/doc/godebug">Go, Backwards Compatibility, and GODEBUG</a>” for details.
</p>

<p><!-- https://go.dev/issue/57001 -->
  To improve forwards compatibility, Go 1.21 now reads the <code>go</code> line
  in a <code>go.work</code> or <code>go.mod</code> file as a strict
  minimum requirement: <code>go</code> <code>1.21.0</code> means
  that the workspace or module cannot be used with Go 1.20 or with Go 1.21rc1.
  This allows projects that depend on fixes made in later versions of Go
  to ensure that they are not used with earlier versions.
  It also gives better error reporting for projects that make use of new Go features:
  when the problem is that a newer Go version is needed,
  that problem is reported clearly, instead of attempting to build the code
  and printing errors about unresolved imports or syntax errors.
</p>

<p>
  To make these new stricter version requirements easier to manage,
  the <code>go</code> command can now invoke not just the toolchain
  bundled in its own release but also other Go toolchain versions found in the PATH
  or downloaded on demand.
  If a <code>go.mod</code> or <code>go.work</code> <code>go</code> line
  declares a minimum requirement on a newer version of Go, the <code>go</code>
  command will find and run that version automatically.
  The new <code>toolchain</code> directive sets a suggested minimum toolchain to use,
  which may be newer than the strict <code>go</code> minimum.
  See “<a href="/doc/toolchain">Go Toolchains</a>” for details.
</p>

<h3 id="go-command">Go command</h3>

<p><!-- https://go.dev/issue/58099, CL 474236 -->
  The <code>-pgo</code> build flag now defaults to <code>-pgo=auto</code>,
  and the restriction of specifying a single main package on the command
  line is now removed. If a file named <code>default.pgo</code> is present
  in the main package's directory, the <code>go</code> command will use
  it to enable profile-guided optimization for building the corresponding
  program.
</p>

<p>
  The <code>-C</code> <code>dir</code> flag must now be the first
  flag on the command-line when used.
</p>

<p><!-- https://go.dev/issue/37708, CL 463837 -->
  The new <code>go</code> <code>test</code> option
  <code>-fullpath</code> prints full path names in test log messages,
  rather than just base names.
</p>

<p><!-- https://go.dev/issue/15513, CL 466397 -->
  The <code>go</code> <code>test</code> <code>-c</code> flag now
  supports writing test binaries for multiple packages, each to
  <code>pkg.test</code> where <code>pkg</code> is the package name.
  It is an error if more than one test package being compiled has a given package name.
</p>

<p><!-- https://go.dev/issue/15513, CL 466397 -->
  The <code>go</code> <code>test</code> <code>-o</code> flag now
  accepts a directory argument, in which case test binaries are written to that
  directory instead of the current directory.
</p>

<h3 id="cgo">Cgo</h3>

<p><!-- CL 490819 -->
  In files that <code>import "C"</code>, the Go toolchain now
  correctly reports errors for attempts to declare Go methods on C types.
</p>

<h2 id="runtime-changes">Runtime</h2>

<p><!-- https://go.dev/issue/7181 -->
  When printing very deep stacks, the runtime now prints the first 50
  (innermost) frames followed by the bottom 50 (outermost) frames,
  rather than just printing the first 100 frames. This makes it easier
  to see how deeply recursive stacks started, and is especially
  valuable for debugging stack overflows.
</p>

<p><!-- https://go.dev/issue/59960 -->
  On Linux platforms that support transparent huge pages, the Go runtime
  now manages which parts of the heap may be backed by huge pages more
  explicitly. This leads to better utilization of memory: small heaps
  should see less memory used (up to 50% in pathological cases) while
  large heaps should see fewer broken huge pages for dense parts of the
  heap, improving CPU usage and latency by up to 1%.
</p>

<p><!-- https://go.dev/issue/57069, https://go.dev/issue/56966 -->
  As a result of runtime-internal garbage collection tuning,
  applications may see up to a 40% reduction in application tail latency
  and a small decrease in memory use. Some applications may also observe
  a small loss in throughput.

  The memory use decrease should be proportional to the loss in
  throughput, such that the previous release's throughput/memory
  tradeoff may be recovered (with little change to latency) by
  increasing <code>GOGC</code> and/or <code>GOMEMLIMIT</code> slightly.
</p>

<p><!-- https://go.dev/issue/51676 -->
  Calls from C to Go on threads created in C require some setup to prepare for
  Go execution. On Unix platforms, this setup is now preserved across multiple
  calls from the same thread. This significantly reduces the overhead of
  subsequent C to Go calls from ~1-3 microseconds per call to ~100-200
  nanoseconds per call.
</p>

<h2 id="compiler">Compiler</h2>

<p>
  Profile-guide optimization (PGO), added as a preview in Go 1.20, is now ready
  for general use. PGO enables additional optimizations on code identified as
  hot by profiles of production workloads. As mentioned in the
  <a href="#go-command">Go command section</a>, PGO is enabled by default for
  binaries that contain a <code>default.pgo</code> profile in the main
  package directory. Performance improvements vary depending on application
  behavior, with most programs from a representative set of Go programs seeing
  between 2 and 7% improvement from enabling PGO. See the
  <a href="/doc/pgo">PGO user guide</a> for detailed documentation.
</p>

<!-- https://go.dev/issue/59959 -->
<p>
  PGO builds can now devirtualize some interface method calls, adding a
  concrete call to the most common callee. This enables further optimization,
  such as inlining the callee.
</p>

<!-- CL 497455 -->
<p>
  Go 1.21 improves build speed by up to 6%, largely thanks to building the
  compiler itself with PGO.
</p>

<h2 id="assembler">Assembler</h2>

<!-- https://go.dev/issue/58378 -->
<p>
  On amd64, frameless nosplit assembly functions are no longer automatically marked as <code>NOFRAME</code>.
  Instead, the <code>NOFRAME</code> attribute must be explicitly specified if desired,
  which is already the behavior on other architectures supporting frame pointers.
  With this, the runtime now maintains the frame pointers for stack transitions.
</p>

<!-- CL 476295 -->
<p>
  The verifier that checks for incorrect uses of <code>R15</code> when dynamic linking on amd64 has been improved.
</p>

<h2 id="linker">Linker</h2>

<p><!-- https://go.dev/issue/57302, CL 461749, CL 457455 -->
  On windows/amd64, the linker (with help from the compiler) now emits
  SEH unwinding data by default, which improves the integration
  of Go applications with Windows debuggers and other tools.
</p>

<!-- CL 463395, CL 461315 -->
<p>
  In Go 1.21 the linker (with help from the compiler) is now capable of
  deleting dead (unreferenced) global map variables, if the number of
  entries in the variable initializer is sufficiently large, and if the
  initializer expressions are side-effect free.
</p>

<h2 id="library">Core library</h2>

<h3 id="slog">New log/slog package</h3>

<p><!-- https://go.dev/issue/59060, https://go.dev/issue/59141, https://go.dev/issue/59204, https://go.dev/issue/59280,
        https://go.dev/issue/59282, https://go.dev/issue/59339, https://go.dev/issue/59345, https://go.dev/issue/61200,
        CL 477295, CL 484096, CL 486376, CL 486415, CL 487855, CL 508195 -->
  The new <a href="/pkg/log/slog">log/slog</a> package provides structured logging with levels.
  Structured logging emits key-value pairs
  to enable fast, accurate processing of large amounts of log data.
  The package supports integration with popular log analysis tools and services.
</p>

<h3 id="slogtest">New testing/slogtest package</h3>

<p><!-- CL 487895 -->
  The new <a href="/pkg/testing/slogtest">testing/slogtest</a> package can help
  to validate <a href="/pkg/log/slog#Handler">slog.Handler</a> implementations.
</p>

<h3 id="slices">New slices package</h3>

<p>
  <!-- https://go.dev/issue/45955, https://go.dev/issue/54768 -->
  <!-- https://go.dev/issue/57348, https://go.dev/issue/57433 -->
  <!-- https://go.dev/issue/58565, https://go.dev/issue/60091 -->
  <!-- https://go.dev/issue/60546 -->
  <!-- CL 467417, CL 468855, CL 483175, CL 496078, CL 498175, CL 502955 -->
  The new <a href="/pkg/slices">slices</a> package provides many common
  operations on slices, using generic functions that work with slices
  of any element type.
</p>

<h3 id="maps">New maps package</h3>

<p><!-- https://go.dev/issue/57436, CL 464343 -->
  The new <a href="/pkg/maps/">maps</a> package provides several
  common operations on maps, using generic functions that work with
  maps of any key or element type.
</p>

<h3 id="cmp">New cmp package</h3>

<p><!-- https://go.dev/issue/59488, CL 496356 -->
  The new <a href="/pkg/cmp/">cmp</a> package defines the type
  constraint <a href="/pkg/cmp/#Ordered"><code>Ordered</code></a> and
  two new generic functions
  <a href="/pkg/cmp/#Less"><code>Less</code></a>
  and <a href="/pkg/cmp/#Compare"><code>Compare</code></a> that are
  useful with <a href="/ref/spec/#Comparison_operators">ordered
  types</a>.
</p>

<h3 id="minor_library_changes">Minor changes to the library</h3>

<p>
  As always, there are various minor changes and updates to the library,
  made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a>
  in mind.
  There are also various performance improvements, not enumerated here.
</p>

<dl id="archive/tar"><dt><a href="/pkg/archive/tar/">archive/tar</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/54451, CL 491175 -->
      The implementation of the
      <a href="/pkg/io/fs/#FileInfo"><code>io/fs.FileInfo</code></a>
      interface returned by
      <a href="/pkg/archive/tar/#Header.FileInfo"><code>Header.FileInfo</code></a>
      now implements a <code>String</code> method that calls
      <a href="/pkg/io/fs/#FormatFileInfo"><code>io/fs.FormatFileInfo</code></a>.
    </p>
  </dd>
</dl><!-- archive/tar -->

<dl id="archive/zip"><dt><a href="/pkg/archive/zip/">archive/zip</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/54451, CL 491175 -->
      The implementation of the
      <a href="/pkg/io/fs/#FileInfo"><code>io/fs.FileInfo</code></a>
      interface returned by
      <a href="/pkg/archive/zip/#FileHeader.FileInfo"><code>FileHeader.FileInfo</code></a>
      now implements a <code>String</code> method that calls
      <a href="/pkg/io/fs/#FormatFileInfo"><code>io/fs.FormatFileInfo</code></a>.
    </p>

    <p><!-- https://go.dev/issue/54451, CL 491175 -->
      The implementation of the
      <a href="/pkg/io/fs/#DirEntry"><code>io/fs.DirEntry</code></a>
      interface returned by the
      <a href="/pkg/io/fs/#ReadDirFile.ReadDir"><code>io/fs.ReadDirFile.ReadDir</code></a>
      method of the
      <a href="/pkg/io/fs/#File"><code>io/fs.File</code></a>
      returned by
      <a href="/pkg/archive/zip/#Reader.Open"><code>Reader.Open</code></a>
      now implements a <code>String</code> method that calls
      <a href="/pkg/io/fs/#FormatDirEntry"><code>io/fs.FormatDirEntry</code></a>.
    </p>
  </dd>
</dl><!-- archive/zip -->

<dl id="bytes"><dt><a href="/pkg/bytes/">bytes</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/53685, CL 474635 -->
      The <a href="/pkg/bytes/#Buffer"><code>Buffer</code></a> type
      has two new methods:
      <a href="/pkg/bytes/#Buffer.Available"><code>Available</code></a>
      and <a href="/pkg/bytes/#Buffer.AvailableBuffer"><code>AvailableBuffer</code></a>.
      These may be used along with the
      <a href="/pkg/bytes/#Buffer.Write"><code>Write</code></a>
      method to append directly to the <code>Buffer</code>.
    </p>
  </dd>
</dl><!-- bytes -->

<dl id="context"><dt><a href="/pkg/context/">context</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/40221, CL 479918 -->
      The new <a href="/pkg/context/#WithoutCancel"><code>WithoutCancel</code></a>
      function returns a copy of a context that is not canceled when the original
      context is canceled.
    </p>
    <p><!-- https://go.dev/issue/56661, CL 449318 -->
      The new <a href="/pkg/context/#WithDeadlineCause"><code>WithDeadlineCause</code></a>
      and <a href="/pkg/context/#WithTimeoutCause"><code>WithTimeoutCause</code></a>
      functions provide a way to set a context cancellation cause when a deadline or
      timer expires. The cause may be retrieved with the
      <a href="/pkg/context/#Cause"><code>Cause</code></a> function.
    </p>
    <p><!-- https://go.dev/issue/57928, CL 482695 -->
      The new <a href="/pkg/context/#AfterFunc"><code>AfterFunc</code></a>
      function registers a function to run after a context has been cancelled.
    </p>

    <p><!-- CL 455455 -->
      An optimization means that the results of calling
      <a href="/pkg/context/#Background"><code>Background</code></a>
      and <a href="/pkg/context/#TODO"><code>TODO</code></a> and
      converting them to a shared type can be considered equal.
      In previous releases they were always different.  Comparing
      <a href="/pkg/context/#Context"><code>Context</code></a> values
      for equality has never been well-defined, so this is not
      considered to be an incompatible change.
    </p>
  </dd>
</dl>


<dl id="crypto/ecdsa"><dt><a href="/pkg/crypto/ecdsa/">crypto/ecdsa</a></dt>
  <dd>
    <p><!-- CL 492955 -->
      <a href="/pkg/crypto/ecdsa/#PublicKey.Equal"><code>PublicKey.Equal</code></a> and
      <a href="/pkg/crypto/ecdsa/#PrivateKey.Equal"><code>PrivateKey.Equal</code></a>
      now execute in constant time.
    </p>
  </dd>
</dl><!-- crypto/ecdsa -->

<dl id="crypto/elliptic"><dt><a href="/pkg/crypto/elliptic/">crypto/elliptic</a></dt>
  <dd>
    <p><!-- CL 459977 -->
      All of the <a href="/pkg/crypto/elliptic/#Curve"><code>Curve</code></a> methods have been deprecated, along with <a href="/pkg/crypto/elliptic/#GenerateKey"><code>GenerateKey</code></a>, <a href="/pkg/crypto/elliptic/#Marshal"><code>Marshal</code></a>, and <a href="/pkg/crypto/elliptic/#Unmarshal"><code>Unmarshal</code></a>. For ECDH operations, the new <a href="/pkg/crypto/ecdh/"><code>crypto/ecdh</code></a> package should be used instead. For lower-level operations, use third-party modules such as <a href="https://pkg.go.dev/filippo.io/nistec">filippo.io/nistec</a>.
    </p>
  </dd>
</dl><!-- crypto/elliptic -->

<dl id="crypto/rand"><dt><a href="/pkg/crypto/rand/">crypto/rand</a></dt>
  <dd>
    <p><!-- CL 463123 -->
      The <a href="/pkg/crypto/rand/"><code>crypto/rand</code></a> package now uses the <code>getrandom</code> system call on NetBSD 10.0 and later.
    </p>
  </dd>
</dl><!-- crypto/rand -->

<dl id="crypto/rsa"><dt><a href="/pkg/crypto/rsa/">crypto/rsa</a></dt>
  <dd>
    <p><!-- CL 471259, CL 492935 -->
      The performance of private RSA operations (decryption and signing) is now better than Go 1.19 for <code>GOARCH=amd64</code> and <code>GOARCH=arm64</code>. It had regressed in Go 1.20.
    </p>
    <p>
      Due to the addition of private fields to <a href="/pkg/crypto/rsa/#PrecomputedValues"><code>PrecomputedValues</code></a>, <a href="/pkg/crypto/rsa/#PrivateKey.Precompute"><code>PrivateKey.Precompute</code></a> must be called for optimal performance even if deserializing (for example from JSON) a previously-precomputed private key.
    </p>
    <p><!-- CL 492955 -->
      <a href="/pkg/crypto/rsa/#PublicKey.Equal"><code>PublicKey.Equal</code></a> and
      <a href="/pkg/crypto/rsa/#PrivateKey.Equal"><code>PrivateKey.Equal</code></a>
      now execute in constant time.
    </p>
    <p><!-- https://go.dev/issue/56921, CL 459976 -->
      The <a href="/pkg/crypto/rsa/#GenerateMultiPrimeKey"><code>GenerateMultiPrimeKey</code></a> function and the <a href="/pkg/crypto/rsa/#PrecomputedValues.CRTValues"><code>PrecomputedValues.CRTValues</code></a> field have been deprecated. <a href="/pkg/crypto/rsa/#PrecomputedValues.CRTValues"><code>PrecomputedValues.CRTValues</code></a> will still be populated when <a href="/pkg/crypto/rsa/#PrivateKey.Precompute"><code>PrivateKey.Precompute</code></a> is called, but the values will not be used during decryption operations.
    </p>
  </dd>
</dl><!-- crypto/rsa -->

<!-- CL 483815 reverted -->

<dl id="crypto/sha256"><dt><a href="/pkg/crypto/sha256/">crypto/sha256</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/50543, CL 408795 -->
      SHA-224 and SHA-256 operations now use native instructions when available when <code>GOARCH=amd64</code>, providing a performance improvement on the order of 3-4x.
    </p>
  </dd>
</dl><!-- crypto/sha256 -->

<!-- CL 481478 reverted -->
<!-- CL 483816 reverted -->

<dl id="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
  <dd>
    <p><!-- CL 497895 -->
      Servers now skip verifying client certificates (including not running
      <a href="/pkg/crypto/tls/#Config.VerifyPeerCertificate"><code>Config.VerifyPeerCertificate</code></a>)
      for resumed connections, besides checking the expiration time. This makes
      session tickets larger when client certificates are in use. Clients were
      already skipping verification on resumption, but now check the expiration
      time even if <a href="/pkg/crypto/tls/#Config.InsecureSkipVerify"><code>Config.InsecureSkipVerify</code></a>
      is set.
    </p>

    <p><!-- https://go.dev/issue/60105, CL 496818, CL 496820, CL 496822, CL 496821, CL 501675 -->
      Applications can now control the content of session tickets.
      <ul>
        <li>
          The new <a href="/pkg/crypto/tls/#SessionState"><code>SessionState</code></a> type
          describes a resumable session.
        </li>
        <li>
          The <a href="/pkg/crypto/tls/#SessionState.Bytes"><code>SessionState.Bytes</code></a>
          method and <a href="/pkg/crypto/tls/#ParseSessionState"><code>ParseSessionState</code></a>
          function serialize and deserialize a <code>SessionState</code>.
        </li>
        <li>
          The <a href="/pkg/crypto/tls/#Config.WrapSession"><code>Config.WrapSession</code></a> and
          <a href="/pkg/crypto/tls/#Config.UnwrapSession"><code>Config.UnwrapSession</code></a>
          hooks convert a <code>SessionState</code> to and from a ticket on the server side.
        </li>
        <li>
          The <a href="/pkg/crypto/tls/#Config.EncryptTicket"><code>Config.EncryptTicket</code></a>
          and <a href="/pkg/crypto/tls/#Config.DecryptTicket"><code>Config.DecryptTicket</code></a>
          methods provide a default implementation of <code>WrapSession</code> and
          <code>UnwrapSession</code>.
        </li>
        <li>
          The <a href="/pkg/crypto/tls/#ClientSessionState.ResumptionState"><code>ClientSessionState.ResumptionState</code></a> method and
          <a href="/pkg/crypto/tls/#NewResumptionState"><code>NewResumptionState</code></a> function
          may be used by a <code>ClientSessionCache</code> implementation to store and
          resume sessions on the client side.
        </li>
      </ul>
    </p>

    <p><!-- CL 496817 -->
      To reduce the potential for session tickets to be used as a tracking
      mechanism across connections, the server now issues new tickets on every
      resumption (if they are supported and not disabled) and tickets don't bear
      an identifier for the key that encrypted them anymore. If passing a large
      number of keys to <a href="/pkg/crypto/tls/#Conn.SetSessionTicketKeys"><code>Conn.SetSessionTicketKeys</code></a>,
      this might lead to a noticeable performance cost.
    </p>

    <p><!-- CL 497376 -->
      Both clients and servers now implement the Extended Master Secret extension (RFC 7627).
      The deprecation of <a href="/pkg/crypto/tls/#ConnectionState.TLSUnique"><code>ConnectionState.TLSUnique</code></a>
      has been reverted, and is now set for resumed connections that support Extended Master Secret.
    </p>

    <p><!-- https://go.dev/issue/44886, https://go.dev/issue/60107, CL 493655, CL 496995, CL 514997 -->
      The new <a href="/pkg/crypto/tls/#QUICConn"><code>QUICConn</code></a> type
      provides support for QUIC implementations, including 0-RTT support. Note
      that this is not itself a QUIC implementation, and 0-RTT is still not
      supported in TLS.
    </p>

    <p><!-- https://go.dev/issue/46308, CL 497377 -->
      The new <a href="/pkg/crypto/tls/#VersionName"><code>VersionName</code></a> function
      returns the name for a TLS version number.
    </p>

    <p><!-- https://go.dev/issue/52113, CL 410496 -->
      The TLS alert codes sent from the server for client authentication failures have
      been improved. Previously, these failures always resulted in a "bad certificate" alert.
      Now, certain failures will result in more appropriate alert codes,
      as defined by RFC 5246 and RFC 8446:
      <ul>
        <li>
          For TLS 1.3 connections, if the server is configured to require client authentication using
          <a href="/pkg/crypto/tls/#RequireAnyClientCert"></code>RequireAnyClientCert</code></a> or
          <a href="/pkg/crypto/tls/#RequireAndVerifyClientCert"></code>RequireAndVerifyClientCert</code></a>,
          and the client does not provide any certificate, the server will now return the "certificate required" alert.
        </li>
        <li>
          If the client provides a certificate that is not signed by the set of trusted certificate authorities
          configured on the server, the server will return the "unknown certificate authority" alert.
        </li>
        <li>
          If the client provides a certificate that is either expired or not yet valid,
          the server will return the "expired certificate" alert.
        </li>
        <li>
          In all other scenarios related to client authentication failures, the server still returns "bad certificate".
        </li>
      </ul>
    </p>
  </dd>
</dl><!-- crypto/tls -->

<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/53573, CL 468875 -->
      <a href="/pkg/crypto/x509/#RevocationList.RevokedCertificates"><code>RevocationList.RevokedCertificates</code></a> has been deprecated and replaced with the new <a href="/pkg/crypto/x509/#RevocationList.RevokedCertificateEntries"><code>RevokedCertificateEntries</code></a> field, which is a slice of <a href="/pkg/crypto/x509/#RevocationListEntry"><code>RevocationListEntry</code></a>. <a href="/pkg/crypto/x509/#RevocationListEntry"><code>RevocationListEntry</code></a> contains all of the fields in <a href="/pkg/crypto/x509/pkix#RevokedCertificate"><code>pkix.RevokedCertificate</code></a>, as well as the revocation reason code.
    </p>

    <p><!-- CL 478216 -->
      Name constraints are now correctly enforced on non-leaf certificates, and
      not on the certificates where they are expressed.
    </p>
  </dd>
</dl><!-- crypto/x509 -->

<dl id="debug/elf"><dt><a href="/pkg/debug/elf/">debug/elf</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/56892, CL 452617 -->
      The new
      <a href="/pkg/debug/elf/#File.DynValue"><code>File.DynValue</code></a>
      method may be used to retrieve the numeric values listed with a
      given dynamic tag.
    </p>

    <p><!-- https://go.dev/issue/56887, CL 452496 -->
      The constant flags permitted in a <code>DT_FLAGS_1</code>
      dynamic tag are now defined with type
      <a href="/pkg/debug/elf/#DynFlag1"><code>DynFlag1</code></a>. These
      tags have names starting with <code>DF_1</code>.
    </p>

    <p><!-- CL 473256 -->
      The package now defines the constant
      <a href="/pkg/debug/elf/#COMPRESS_ZSTD"><code>COMPRESS_ZSTD</code></a>.
    </p>

    <p><!-- https://go.dev/issue/60348, CL 496918 -->
      The package now defines the constant
      <a href="/pkg/debug/elf/#R_PPC64_REL24_P9NOTOC"><code>R_PPC64_REL24_P9NOTOC</code></a>.
    </p>
  </dd>
</dl><!-- debug/elf -->

<dl id="debug/pe"><dt><a href="/pkg/debug/pe/">debug/pe</a></dt>
  <dd>
    <p><!-- CL 488475 -->
      Attempts to read from a section containing uninitialized data
      using
      <a href="/pkg/debug/pe/#Section.Data"><code>Section.Data</code></a>
      or the reader returned by <a href="/pkg/debug/pe/#Section.Open"><code>Section.Open</code></a>
      now return an error.
    </p>
  </dd>
</dl><!-- debug/pe -->

<dl id="embed"><dt><a href="/pkg/embed/">embed</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/57803, CL 483235 -->
      The <a href="/pkg/io/fs/#File"><code>io/fs.File</code></a>
      returned by
      <a href="/pkg/embed/#FS.Open"><code>FS.Open</code></a> now
      has a <code>ReadAt</code> method that
      implements <a href="/pkg/io/#ReaderAt"><code>io.ReaderAt</code></a>.
    </p>

    <p><!-- https://go.dev/issue/54451, CL 491175 -->
      Calling <code><a href="/pkg/embed/FS.Open">FS.Open</a>.<a href="/pkg/io/fs/#File.Stat">Stat</a></code>
      will return a type that now implements a <code>String</code>
      method that calls
      <a href="/pkg/io/fs/#FormatFileInfo"><code>io/fs.FormatFileInfo</code></a>.
    </p>
  </dd>
</dl><!-- embed -->

<dl id="encoding/binary"><dt><a href="/pkg/encoding/binary/">encoding/binary</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/57237, CL 463218, CL 463985 -->
      The new
      <a href="/pkg/encoding/binary/#NativeEndian"><code>NativeEndian</code></a>
      variable may be used to convert between byte slices and integers
      using the current machine's native endianness.
    </p>
  </dd>
</dl><!-- encoding/binary -->

<dl id="errors"><dt><a href="/pkg/errors/">errors</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/41198, CL 473935 -->
      The new
      <a href="/pkg/errors/#ErrUnsupported"><code>ErrUnsupported</code></a>
      error provides a standardized way to indicate that a requested
      operation may not be performed because it is unsupported.
      For example, a call to
      <a href="/pkg/os/#Link"><code>os.Link</code></a> when using a
      file system that does not support hard links.
    </p>
  </dd>
</dl><!-- errors -->

<dl id="flag"><dt><a href="/pkg/flag/">flag</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/53747, CL 476015 -->
      The new <a href="/pkg/flag/#BoolFunc"><code>BoolFunc</code></a>
      function and
      <a href="/pkg/flag/#FlagSet.BoolFunc"><code>FlagSet.BoolFunc</code></a>
      method define a flag that does not require an argument and calls
      a function when the flag is used. This is similar to
      <a href="/pkg/flag/#Func"><code>Func</code></a> but for a
      boolean flag.
    </p>

    <p><!-- CL 480215 -->
      A flag definition
      (via <a href="/pkg/flag/#Bool"><code>Bool</code></a>,
      <a href="/pkg/flag/#BoolVar"><code>BoolVar</code></a>,
      <a href="/pkg/flag/#Int"><code>Int</code></a>,
      <a href="/pkg/flag/#IntVar"><code>IntVar</code></a>, etc.)
      will panic if <a href="/pkg/flag/#Set"><code>Set</code></a> has
      already been called on a flag with the same name. This change is
      intended to detect cases where <a href="#language">changes in
      initialization order</a> cause flag operations to occur in a
      different order than expected. In many cases the fix to this
      problem is to introduce a explicit package dependence to
      correctly order the definition before any
      <a href="/pkg/flag/#Set"><code>Set</code></a> operations.
    </p>
  </dd>
</dl><!-- flag -->

<dl id="go/ast"><dt><a href="/pkg/go/ast/">go/ast</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/28089, CL 487935 -->
      The new <a href="/pkg/go/ast/#IsGenerated"><code>IsGenerated</code></a> predicate
      reports whether a file syntax tree contains the
      <a href="https://go.dev/s/generatedcode">special comment</a>
      that conventionally indicates that the file was generated by a tool.
    </p>
  </dd>

  <dd>
    <p><!-- https://go.dev/issue/59033, CL 476276 -->
      The new
      <a href="/pkg/go/ast/#File.GoVersion"><code>File.GoVersion</code></a>
      field records the minimum Go version required by
      any <code>//go:build</code> or <code>// +build</code>
      directives.
    </p>
  </dd>
</dl><!-- go/ast -->

<dl id="go/build"><dt><a href="/pkg/go/build/">go/build</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/56986, CL 453603 -->
      The package now parses build directives (comments that start
      with <code>//go:</code>) in file headers (before
      the <code>package</code> declaration). These directives are
      available in the new
      <a href="/pkg/go/build#Package"><code>Package</code></a> fields
      <a href="/pkg/go/build#Package.Directives"><code>Directives</code></a>,
      <a href="/pkg/go/build#Package.TestDirectives"><code>TestDirectives</code></a>,
      and
      <a href="/pkg/go/build#Package.XTestDirectives"><code>XTestDirectives</code></a>.
    </p>
  </dd>
</dl><!-- go/build -->

<dl id="go/build/constraint"><dt><a href="/pkg/go/build/constraint/">go/build/constraint</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/59033, CL 476275 -->
      The new
      <a href="/pkg/go/build/constraint/#GoVersion"><code>GoVersion</code></a>
      function returns the minimum Go version implied by a build
      expression.
    </p>
  </dd>
</dl><!-- go/build/constraint -->

<dl id="go/token"><dt><a href="/pkg/go/token/">go/token</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/57708, CL 464515 -->
      The new <a href="/pkg/go/token/#File.Lines"><code>File.Lines</code></a> method
      returns the file's line-number table in the same form as accepted by
      <code>File.SetLines</code>.
    </p>
  </dd>
</dl><!-- go/token -->

<dl id="go/types"><dt><a href="/pkg/go/types/">go/types</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/61175, CL 507975 -->
      The new <a href="/pkg/go/types/#Package.GoVersion"><code>Package.GoVersion</code></a>
      method returns the Go language version used to check the package.
    </p>
  </dd>
</dl><!-- go/types -->

<dl id="hash/maphash"><dt><a href="/pkg/hash/maphash/">hash/maphash</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/47342, CL 468795 -->
      The <code>hash/maphash</code> package now has a pure Go implementation, selectable with the <code>purego</code> build tag.
    </p>
  </dd>
</dl><!-- hash/maphash -->

<dl id="html/template"><dt><a href="/pkg/html/template/">html/template</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/59584, CL 496395 -->
      The new error
      <a href="/pkg/html/template/#ErrJSTemplate"><code>ErrJSTemplate</code></a>
      is returned when an action appears in a JavaScript template
      literal. Previously an unexported error was returned.
    </p>
  </dd>
</dl><!-- html/template -->

<dl id="io/fs"><dt><a href="/pkg/io/fs/">io/fs</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/54451, CL 489555 -->
      The new
      <a href="/pkg/io/fs/#FormatFileInfo"><code>FormatFileInfo</code></a>
      function returns a formatted version of a
      <a href="/pkg/io/fs/#FileInfo"><code>FileInfo</code></a>.
      The new
      <a href="/pkg/io/fs/#FormatDirEntry"><code>FormatDirEntry</code></a>
      function returns a formatted version of a
      <a href="/pkg/io/fs/#FileInfo"><code>DirEntry</code></a>.
      The implementation of
      <a href="/pkg/io/fs/#DirEntry"><code>DirEntry</code></a>
      returned by
      <a href="/pkg/io/fs/#ReadDir"><code>ReadDir</code></a> now
      implements a <code>String</code> method that calls
      <a href="/pkg/io/fs/#FormatDirEntry"><code>FormatDirEntry</code></a>,
      and the same is true for
      the <a href="/pkg/io/fs/#DirEntry"><code>DirEntry</code></a>
      value passed to
      <a href="/pkg/io/fs/#WalkDirFunc"><code>WalkDirFunc</code></a>.
    </p>
  </dd>
</dl><!-- io/fs -->

<!-- https://go.dev/issue/56491 rolled back by https://go.dev/issue/60519 -->
<!-- CL 459435 reverted by CL 467255 -->
<!-- CL 467515 reverted by CL 499416 -->

<dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/56984, CL 453115, CL 500116 -->
      The new <a href="/pkg/math/big/#Int.Float64"><code>Int.Float64</code></a>
      method returns the nearest floating-point value to a
      multi-precision integer, along with an indication of any
      rounding that occurred.
    </p>
  </dd>
</dl><!-- math/big -->

<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
  <dd>
    <p>
      <!-- https://go.dev/issue/59166, https://go.dev/issue/56539 -->
      <!-- CL 471136, CL 471137, CL 471140 -->
      On Linux, the <a href="/pkg/net/">net</a> package can now use
      Multipath TCP when the kernel supports it. It is not used by
      default. To use Multipath TCP when available on a client, call
      the
      <a href="/pkg/net/#Dialer.SetMultipathTCP"><code>Dialer.SetMultipathTCP</code></a>
      method before calling the
      <a href="/pkg/net/#Dialer.Dial"><code>Dialer.Dial</code></a> or
      <a href="/pkg/net/#Dialer.DialContext"><code>Dialer.DialContext</code></a>
      methods. To use Multipath TCP when available on a server, call
      the
      <a href="/pkg/net/#ListenConfig.SetMultipathTCP"><code>ListenConfig.SetMultipathTCP</code></a>
      method before calling the
      <a href="/pkg/net/#ListenConfig.Listen"><code>ListenConfig.Listen</code></a>
      method. Specify the network as <code>"tcp"</code> or
      <code>"tcp4"</code> or <code>"tcp6"</code> as usual. If
      Multipath TCP is not supported by the kernel or the remote host,
      the connection will silently fall back to TCP. To test whether a
      particular connection is using Multipath TCP, use the
      <a href="/pkg/net/#TCPConn.MultipathTCP"><code>TCPConn.MultipathTCP</code></a>
      method.
    </p>
    <p>
      In a future Go release we may enable Multipath TCP by default on
      systems that support it.
    </p>
  </dd>
</dl><!-- net -->

<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
  <dd>
    <p><!-- CL 472636 -->
      The new <a href="/pkg/net/http#ResponseController.EnableFullDuplex"><code>ResponseController.EnableFullDuplex</code></a>
      method allows server handlers to concurrently read from an HTTP/1
      request body while writing the response. Normally, the HTTP/1 server
      automatically consumes any remaining request body before starting to
      write the response, to avoid deadlocking clients which attempt to
      write a complete request before reading the response. The
      <code>EnableFullDuplex</code> method disables this behavior.
    </p>

    <p><!-- https://go.dev/issue/44855, CL 382117 -->
      The new <a href="/pkg/net/http/#ErrSchemeMismatch"><code>ErrSchemeMismatch</code></a> error is returned by <a href="/pkg/net/http/#Client"><code>Client</code></a> and <a href="/pkg/net/http/#Transport"><code>Transport</code></a> when the server responds to an HTTPS request with an HTTP response.
    </p>

    <p><!-- CL 494122 -->
      The <a href="/pkg/net/http/">net/http</a> package now supports
      <a href="/pkg/errors/#ErrUnsupported"><code>errors.ErrUnsupported</code></a>,
      in that the expression
      <code>errors.Is(http.ErrNotSupported, errors.ErrUnsupported)</code>
      will return true.
    </p>
  </dd>
</dl><!-- net/http -->

<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/32558, CL 219638 -->
      Programs may now pass an empty <code>time.Time</code> value to
      the <a href="/pkg/os/#Chtimes"><code>Chtimes</code></a> function
      to leave either the access time or the modification time unchanged.
    </p>

    <p><!-- CL 480135 -->
      On Windows the
      <a href="/pkg/os#File.Chdir"><code>File.Chdir</code></a> method
      now changes the current directory to the file, rather than
      always returning an error.
    </p>

    <p><!-- CL 495079 -->
      On Unix systems, if a non-blocking descriptor is passed
      to <a href="/pkg/os/#NewFile"><code>NewFile</code></a>, calling
      the <a href="/pkg/os/#File.Fd"><code>File.Fd</code></a> method
      will now return a non-blocking descriptor. Previously the
      descriptor was converted to blocking mode.
    </p>

    <p><!-- CL 477215 -->
      On Windows calling
      <a href="/pkg/os/#Truncate"><code>Truncate</code></a> on a
      non-existent file used to create an empty file. It now returns
      an error indicating that the file does not exist.
    </p>

    <p><!-- https://go.dev/issue/56899, CL 463219 -->
      On Windows calling
      <a href="/pkg/os/#TempDir"><code>TempDir</code></a> now uses
      GetTempPath2W when available, instead of GetTempPathW. The
      new behavior is a security hardening measure that prevents
      temporary files created by processes running as SYSTEM to
      be accessed by non-SYSTEM processes.
    </p>

    <p><!-- CL 493036 -->
      On Windows the os package now supports working with files whose
      names, stored as UTF-16, can't be represented as valid UTF-8.
    </p>

    <p><!-- CL 463177 -->
      On Windows <a href="/pkg/os/#Lstat"><code>Lstat</code></a> now resolves
      symbolic links for paths ending with a path separator, consistent with its
      behavior on POSIX platforms.
    </p>

    <p><!-- https://go.dev/issue/54451, CL 491175 -->
      The implementation of the
      <a href="/pkg/io/fs/#DirEntry"><code>io/fs.DirEntry</code></a>
      interface returned by the
      <a href="/pkg/os/#ReadDir"><code>ReadDir</code></a> function and
      the <a href="/pkg/os/#File.ReadDir"><code>File.ReadDir</code></a>
      method now implements a <code>String</code> method that calls
      <a href="/pkg/io/fs/#FormatDirEntry"><code>io/fs.FormatDirEntry</code></a>.
    </p>

    <p><!-- https://go.dev/issue/53761, CL 416775, CL 498015-->
    The implementation of the
    <a href="/pkg/io/fs/#FS"><code>io/fs.FS</code></a> interface returned by
    the <a href="/pkg/os/#DirFS"><code>DirFS</code></a> function now implements
    the <a href="/pkg/io/fs/#ReadFileFS"><code>io/fs.ReadFileFS</code></a> and
    the <a href="/pkg/io/fs/#ReadDirFS"><code>io/fs.ReadDirFS</code></a>
    interfaces.
    </p>
  </dd>
</dl><!-- os -->

<dl id="path/filepath"><dt><a href="/pkg/path/filepath/">path/filepath</a></dt>
  <dd>
    <p>
      The implementation of the
      <a href="/pkg/io/fs/#DirEntry"><code>io/fs.DirEntry</code></a>
      interface passed to the function argument of
      <a href="/pkg/path/filepath/#WalkDir"><code>WalkDir</code></a>
      now implements a <code>String</code> method that calls
      <a href="/pkg/io/fs/#FormatDirEntry"><code>io/fs.FormatDirEntry</code></a>.
    </p>
  </dd>
</dl><!-- path/filepath -->

<!-- CL 459455 reverted -->

<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  <dd>
    <p><!-- CL 408826, CL 413474 -->
      In Go 1.21, <a href="/pkg/reflect/#ValueOf"><code>ValueOf</code></a>
      no longer forces its argument to be allocated on the heap, allowing
      a <code>Value</code>'s content to be allocated on the stack. Most
      operations on a <code>Value</code> also allow the underlying value
      to be stack allocated.
    </p>

    <p><!-- https://go.dev/issue/55002 -->
      The new <a href="/pkg/reflect/#Value"><code>Value</code></a>
      method <a href="/pkg/reflect/#Value.Clear"><code>Value.Clear</code></a>
      clears the contents of a map or zeros the contents of a slice.
      This corresponds to the new <code>clear</code> built-in
      <a href="#language">added to the language</a>.
    </p>

    <p><!-- https://go.dev/issue/56906, CL 452762 -->
      The <a href="/pkg/reflect/#SliceHeader"><code>SliceHeader</code></a>
      and <a href="/pkg/reflect/#StringHeader"><code>StringHeader</code></a>
      types are now deprecated. In new code
      prefer <a href="/pkg/unsafe/#Slice"><code>unsafe.Slice</code></a>,
      <a href="/pkg/unsafe/#SliceData"><code>unsafe.SliceData</code></a>,
      <a href="/pkg/unsafe/#String"><code>unsafe.String</code></a>,
      or <a href="/pkg/unsafe/#StringData"><code>unsafe.StringData</code></a>.
    </p>
  </dd>
</dl><!-- reflect -->

<dl id="regexp"><dt><a href="/pkg/regexp/">regexp</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/46159, CL 479401 -->
      <a href="/pkg/regexp#Regexp"><code>Regexp</code></a> now defines
      <a href="/pkg/regexp#Regexp.MarshalText"><code>MarshalText</code></a>
      and <a href="/pkg/regexp#Regexp.UnmarshalText"><code>UnmarshalText</code></a>
      methods. These implement
      <a href="/pkg/encoding#TextMarshaler"><code>encoding.TextMarshaler</code></a>
      and
      <a href="/pkg/encoding#TextUnmarshaler"><code>encoding.TextUnmarshaler</code></a>
      and will be used by packages such as
      <a href="/pkg/encoding/json">encoding/json</a>.
    </p>
  </dd>
</dl><!-- regexp -->

<dl id="runtime"><dt><a href="/pkg/runtime/">runtime</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/38651, CL 435337 -->
      Textual stack traces produced by Go programs, such as those
      produced when crashing, calling <code>runtime.Stack</code>, or
      collecting a goroutine profile with <code>debug=2</code>, now
      include the IDs of the goroutines that created each goroutine in
      the stack trace.
    </p>

    <p><!-- https://go.dev/issue/57441, CL 474915 -->
      Crashing Go applications can now opt-in to Windows Error Reporting (WER) by setting the environment variable
      <code>GOTRACEBACK=wer</code> or calling <a href="/pkg/runtime/debug/#SetTraceback"><code>debug.SetTraceback("wer")</code></a>
      before the crash. Other than enabling WER, the runtime will behave as with <code>GOTRACEBACK=crash</code>.
      On non-Windows systems, <code>GOTRACEBACK=wer</code> is ignored.
    </p>

    <p><!-- CL 447778 -->
      <code>GODEBUG=cgocheck=2</code>, a thorough checker of cgo pointer passing rules,
      is no longer available as a <a href="/pkg/runtime#hdr-Environment_Variables">debug option</a>.
      Instead, it is available as an experiment using <code>GOEXPERIMENT=cgocheck2</code>.
      In particular this means that this mode has to be selected at build time instead of startup time.
    </p>

    <p>
      <code>GODEBUG=cgocheck=1</code> is still available (and is still the default).
    </p>

    <p><!-- https://go.dev/issue/46787, CL 367296 -->
      A new type <code>Pinner</code> has been added to the runtime
      package. <code>Pinner</code>s may be used to "pin" Go memory
      such that it may be used more freely by non-Go code. For instance,
      passing Go values that reference pinned Go memory to C code is
      now allowed. Previously, passing any such nested reference was
      disallowed by the
      <a href="https://pkg.go.dev/cmd/cgo#hdr-Passing_pointers">cgo pointer passing rules.</a>

      See <a href="/pkg/runtime#Pinner">the docs</a> for more details.
    </p>

    <!-- CL 472195 no release note needed -->
  </dd>
</dl><!-- runtime -->

<dl id="runtime/metrics"><dt><a href="/pkg/runtime/metrics/">runtime/metrics</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/56857, CL 497315 -->
      A few previously-internal GC metrics, such as live heap size, are
      now available.

      <code>GOGC</code> and <code>GOMEMLIMIT</code> are also now
      available as metrics.
    </p>
  </dd>
</dl><!-- runtime/metrics -->

<dl id="runtime/trace"><dt><a href="/pkg/runtime/trace/">runtime/trace</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/16638 -->
      Collecting traces on amd64 and arm64 now incurs a substantially
      smaller CPU cost: up to a 10x improvement over the previous release.
    </p>

    <p><!-- CL 494495 -->
      Traces now contain explicit stop-the-world events for every reason
      the Go runtime might stop-the-world, not just garbage collection.
    </p>
  </dd>
</dl><!-- runtime/trace -->

<dl id="sync"><dt><a href="/pkg/sync/">sync</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/56102, CL 451356 -->
      The new <a href="/pkg/sync/#OnceFunc"><code>OnceFunc</code></a>,
      <a href="/pkg/sync/#OnceValue"><code>OnceValue</code></a>, and
      <a href="/pkg/sync/#OnceValues"><code>OnceValues</code></a>
      functions capture a common use of <a href="/pkg/sync/#Once">Once</a> to
      lazily initialize a value on first use.
    </p>
  </dd>
</dl>

<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
  <dd>
    <p><!-- CL 480135 -->
      On Windows the
      <a href="/pkg/syscall#Fchdir"><code>Fchdir</code></a> function
      now changes the current directory to its argument, rather than
      always returning an error.
    </p>

    <p><!-- https://go.dev/issue/46259, CL 458335 -->
      On FreeBSD
      <a href="/pkg/syscall#SysProcAttr"><code>SysProcAttr</code></a>
      has a new field <code>Jail</code> that may be used to put the
      newly created process in a jailed environment.
    </p>

    <p><!-- CL 493036 -->
      On Windows the syscall package now supports working with files whose
      names, stored as UTF-16, can't be represented as valid UTF-8.
      The <a href="/pkg/syscall#UTF16ToString"><code>UTF16ToString</code></a>
      and <a href="/pkg/syscall#UTF16FromString"><code>UTF16FromString</code></a>
      functions now convert between UTF-16 data and
      <a href="https://simonsapin.github.io/wtf-8/">WTF-8</a> strings.
      This is backward compatible as WTF-8 is a superset of the UTF-8
      format that was used in earlier releases.
    </p>

    <p><!-- CL 476578, CL 476875, CL 476916 -->
      Several error values match the new
      <a href="/pkg/errors/#ErrUnsupported"><code>errors.ErrUnsupported</code></a>,
      such that <code>errors.Is(err, errors.ErrUnsupported)</code>
      returns true.
      <ul>
        <li><code>ENOSYS</code></li>
        <li><code>ENOTSUP</code></li>
        <li><code>EOPNOTSUPP</code></li>
        <li><code>EPLAN9</code> (Plan 9 only)</li>
        <li><code>ERROR_CALL_NOT_IMPLEMENTED</code> (Windows only)</li>
        <li><code>ERROR_NOT_SUPPORTED</code> (Windows only)</li>
        <li><code>EWINDOWS</code> (Windows only)</li>
      </ul>
    </p>
  </dd>
</dl><!-- syscall -->

<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/37708, CL 463837 -->
      The new <code>-test.fullpath</code> option will print full path
      names in test log messages, rather than just base names.
    </p>

    <p><!-- https://go.dev/issue/52600, CL 475496 -->
      The new <a href="/pkg/testing/#Testing"><code>Testing</code></a> function reports whether the program is a test created by <code>go</code> <code>test</code>.
    </p>
  </dd>
</dl><!-- testing -->

<dl id="testing/fstest"><dt><a href="/pkg/testing/fstest/">testing/fstest</a></dt>
  <dd>
    <p><!-- https://go.dev/issue/54451, CL 491175 -->
      Calling <code><a href="/pkg/testing/fstest/MapFS.Open">Open</a>.<a href="/pkg/io/fs/#File.Stat">Stat</a></code>
      will return a type that now implements a <code>String</code>
      method that calls
      <a href="/pkg/io/fs/#FormatFileInfo"><code>io/fs.FormatFileInfo</code></a>.
    </p>
  </dd>
</dl><!-- testing/fstest -->

<dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
  <dd>
    <p><!-- CL 456837 -->
      The <a href="/pkg/unicode/"><code>unicode</code></a> package and
      associated support throughout the system has been upgraded to
      <a href="https://www.unicode.org/versions/Unicode15.0.0/">Unicode 15.0.0</a>.
    </p>
  </dd>
</dl><!-- unicode -->

<h2 id="ports">Ports</h2>

<h3 id="darwin">Darwin</h3>

<p><!-- https://go.dev/issue/57125 -->
  As <a href="go1.20#darwin">announced</a> in the Go 1.20 release notes,
  Go 1.21 requires macOS 10.15 Catalina or later;
  support for previous versions has been discontinued.
</p>

<h3 id="windows">Windows</h3>

<p><!-- https://go.dev/issue/57003, https://go.dev/issue/57004 -->
  As <a href="go1.20#windows">announced</a> in the Go 1.20 release notes,
  Go 1.21 requires at least Windows 10 or Windows Server 2016;
  support for previous versions has been discontinued.
</p>

<!-- CL 470695 -->
<p>
  <!-- cmd/dist: default to GOARM=7 on all non-arm systems -->
</p>

<h3 id="wasm">WebAssembly</h3>

<p><!-- https://go.dev/issue/38248, https://go.dev/issue/59149, CL 489255 -->
  The new <code>go:wasmimport</code> directive can now be used in Go programs
  to import functions from the WebAssembly host.
</p>

<!-- https://go.dev/issue/56100 -->
<p>
  The Go scheduler now interacts much more efficiently with the
  JavaScript event loop, especially in applications that block
  frequently on asynchronous events.
</p>


<h3 id="wasip1">WebAssembly System Interface</h3>

<p><!-- https://go.dev/issue/58141 -->
  Go 1.21 adds an experimental port to the <a href="https://wasi.dev/">
  WebAssembly System Interface (WASI)</a>, Preview 1
  (<code>GOOS=wasip1</code>, <code>GOARCH=wasm</code>).
</p>

<p>
  As a result of the addition of the new <code>GOOS</code> value
  "<code>wasip1</code>", Go files named <code>*_wasip1.go</code>
  will now be <a href="/pkg/go/build/#hdr-Build_Constraints">ignored
  by Go tools</a> except when that <code>GOOS</code> value is being
  used.
  If you have existing filenames matching that pattern, you will
  need to rename them.
</p>

<h3 id="PPC64">ppc64/ppc64le</h3>

<p><!-- go.dev/issue/44549 -->
  On Linux, <code>GOPPC64=power10</code> now generates PC-relative instructions, prefixed
  instructions, and other new Power10 instructions. On AIX, <code>GOPPC64=power10</code>
  generates Power10 instructions, but does not generate PC-relative instructions.
</p>

<p>
  When building position-independent binaries for <code>GOPPC64=power10</code>
  <code>GOOS=linux</code> <code>GOARCH=ppc64le</code>, users can expect reduced binary
  sizes in most cases, in some cases 3.5%. Position-independent binaries are built for
  ppc64le with the following <code>-buildmode</code> values:
  <code>c-archive</code>, <code>c-shared</code>, <code>shared</code>, <code>pie</code>, <code>plugin</code>.
</p>

<h3 id="loong64">loong64</h3>

<p><!-- go.dev/issue/53301, CL 455075, CL 425474, CL 425476, CL 425478, CL 489576 -->
  The <code>linux/loong64</code> port now supports <code>-buildmode=c-archive</code>,
  <code>-buildmode=c-shared</code> and <code>-buildmode=pie</code>.
</p>

<!-- proposals for x repos that don't need to be mentioned here but
     are picked up by the relnote tool. -->
<!-- https://go.dev/issue/54232 -->
<!-- https://go.dev/issue/57051 -->
<!-- https://go.dev/issue/57792 -->
<!-- https://go.dev/issue/57906 -->
<!-- https://go.dev/issue/58668 -->
<!-- https://go.dev/issue/59016 -->
<!-- https://go.dev/issue/59676 -->
<!-- https://go.dev/issue/60409 -->
<!-- https://go.dev/issue/61176 -->

<!-- changes to cmd/api that don't need release notes. -->
<!-- CL 469115, CL 469135, CL 499981 -->

<!-- proposals that don't need release notes. -->
<!-- https://go.dev/issue/10275 -->
<!-- https://go.dev/issue/59719 -->
