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

<!--
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">DRAFT RELEASE NOTES — Introduction to Go 1.18</h2>

<p>
  <strong>
    Go 1.18 is not yet released. These are work-in-progress
    release notes. Go 1.18 is expected to be released in February 2022.
  </strong>
</p>

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

<h3 id="generics">Generics</h3>

<p><!-- https://golang.org/issue/43651, https://golang.org/issue/45346 -->
  Go 1.18 includes an implementation of generic features as described by the
  <a href="https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md">Type
    Parameters Proposal</a>.
  This includes major - but fully backward-compatible - changes to the language.
</p>

<p>
  These new language changes required a large amount of new code that
  has not had significant testing in production settings. That will
  only happen as more people write and use generic code. We believe
  that this feature is well implemented and high quality. However,
  unlike most aspects of Go, we can't back up that belief with real
  world experience. Therefore, while we encourage the use of generics
  where it makes sense, please use appropriate caution when deploying
  generic code in production.
</p>

<p>
  The following is a list of the most visible changes. For a more comprehensive overview, see the
  <a href="https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md">proposal</a>.
  For details see the <a href="/ref/spec">language spec</a>.
</p>

<ul>
  <li>
    The syntax for
    <a href="/ref/spec#Function_declarations">function</a> and
    <a href="/ref/spec#Type_declarations">type declarations</a>
    now accepts
    <a href="/ref/spec#Type_parameters">type parameters</a>.
  </li>
  <li>
    Parameterized functions and types can be instantiated by following them with a list of
    type arguments in square brackets.
  </li>
  <li>
    The new token <code>~</code> has been added to the set of
    <a href="/ref/spec#Operators_and_punctuation">operators and punctuation</a>.
  </li>
  <li>
    The syntax for
    <a href="/ref/spec#Interface_types">Interface types</a>
    now permits the embedding of arbitrary types (not just type names of interfaces)
    as well as union and <code>~T</code> type elements. Such interfaces may only be used
    as type constraints.
    An interface now defines a set of types as well as a set of methods.
  </li>
  <li>
    The new
    <a href="/ref/spec#Predeclared_identifiers">predeclared identifier</a>
    <code>any</code> is an alias for the empty interface. It may be used instead of
    <code>interface{}</code>.
  </li>
  <li>
    The new
    <a href="/ref/spec#Predeclared_identifiers">predeclared identifier</a>
    <code>comparable</code> is an interface that denotes the set of all types which can be
    compared using <code>==</code> or <code>!=</code>. It may only be used as (or embedded in)
    a type constraint.
  </li>
</ul>

<p>
  There are three experimental packages using generics that may be
  useful.
  These packages are in x/exp repository; their API is not covered by
  the Go 1 guarantee and may change as we gain more experience with
  generics.
  <dl>
    <dt><a href="https://pkg.go.dev/golang.org/x/exp/constraints"><code>golang.org/x/exp/constraints</code></a></dt>
    <dd>
      <p>
	Constraints that are useful for generic code, such as
	<a href="https://pkg.go.dev/golang.org/x/exp/constraints#Ordered"><code>constraints.Ordered</code></a>.
      </p>
    </dd>

    <dt><a href="https://pkg.go.dev/golang.org/x/exp/slices"><code>golang.org/x/exp/slices</code></a></dt>
    <dd>
      <p>
	A collection of generic functions that operate on slices of
	any element type.
      </p>
    </dd>

    <dt><a href="https://pkg.go.dev/golang.org/x/exp/maps"><code>golang.org/x/exp/maps</code></a></dt>
    <dd>
      <p>
	A collection of generic functions that operate on maps of
	any key or element type.
      </p>
    </dd>
  </dl>
</p>

<p>
  The current generics implementation has the following limitations:
  <ul>
    <li><!-- https://golang.org/issue/47631 -->
      The Go compiler cannot currently handle type declarations inside generic functions
      or methods. We hope to provide support for this feature in Go 1.19.
    </li>
    <li><!-- https://golang.org/issue/50937 -->
      The Go compiler currently does not accept arguments of type parameter type with
      the predeclared functions <code>real</code>, <code>imag</code>, and <code>complex</code>.
      We hope to remove this restriction in Go 1.19.
    </li>
    <li><!-- https://golang.org/issue/51183 -->
      The Go compiler currently only supports calling a method <code>m</code> on a value
      <code>x</code> of type parameter type <code>P</code> if <code>m</code> is explicitly
      declared by <code>P</code>'s constraint interface.
      Similarly, method values <code>x.m</code> and method expressions
      <code>P.m</code> also are only supported if <code>m</code> is explicitly
      declared by <code>P</code>, even though <code>m</code> might be in the method set
      of <code>P</code> by virtue of the fact that all types in <code>P</code> implement
      <code>m</code>. We hope to remove this restriction in Go 1.19.
    </li>
    <li><!-- https://golang.org/issue/49030 -->
      Embedding a type parameter, or a pointer to a type parameter, as
      an unnamed field in a struct type is not permitted. Similarly,
      embedding a type parameter in an interface type is not permitted.
      Whether these will ever be permitted is unclear at present.
    </li>
    <li>
      A union element with more than one term may not contain an
      interface type with a non-empty method set. Whether this will
      ever be permitted is unclear at present.
    </li>
  </ul>
</p>

<h3 id="bug_fixes">Bug fixes</h3>

<p>
  The Go 1.18 compiler now correctly reports <code>declared but not used</code> errors
  for variables that are set inside a function literal but are never used. Before Go 1.18,
  the compiler did not report an error in such cases. This fixes long-outstanding compiler
  issue <a href="https://golang.org/issue/8560">#8560</a>. As a result of this change,
  (possibly incorrect) programs may not compile anymore. The necessary fix is
  straightforward: fix the program if it was in fact incorrect, or use the offending
  variable, for instance by assigning it to the blank identifier <code>_</code>.
  Since <code>go vet</code> always pointed out this error, the number of affected
  programs is likely very small.
</p>

<p>
  The Go 1.18 compiler now reports an overflow when passing a rune constant expression
  such as <code>'1' &lt;&lt; 32</code> as an argument to the predeclared functions
  <code>print</code> and <code>println</code>, consistent with the behavior of
  user-defined functions. Before Go 1.18, the compiler did not report an error
  in such cases but silently accepted such constant arguments if they fit into an
  <code>int64</code>. As a result of this change, (possibly incorrect) programs
  may not compile anymore. The necessary fix is straightforward: fix the program if it
  was in fact incorrect, or explicitly convert the offending argument to the correct type.
  Since <code>go vet</code> always pointed out this error, the number of affected
  programs is likely very small.
</p>

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

<h3 id="amd64">AMD64</h3>

<p><!-- CL 349595 -->
  Go 1.18 introduces the new <code>GOAMD64</code> environment variable, which selects at compile time
  a minimum target version of the AMD64 architecture. Allowed values are <code>v1</code>,
  <code>v2</code>, <code>v3</code>, or <code>v4</code>. Each higher level requires,
  and takes advantage of, additional processor features. A detailed
  description can be found
  <a href="https://golang.org/wiki/MinimumRequirements#amd64">here</a>.
</p>
<p>
  The <code>GOAMD64</code> environment variable defaults to <code>v1</code>.
</p>

<h3 id="riscv">RISC-V</h3>

<p><!-- golang.org/issue/47100, CL 334872 -->
  The 64-bit RISC-V architecture on Linux (the <code>linux/riscv64</code> port)
  now supports the <code>c-archive</code> and <code>c-shared</code> build modes.
</p>

<h3 id="linux">Linux</h3>

<p><!-- golang.org/issue/45964 -->
  Go 1.18 requires Linux kernel version 2.6.32 or later.
</p>

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

<p><!-- https://golang.org/issue/49759 -->
  The <code>windows/arm</code> and <code>windows/arm64</code> ports now support
  non-cooperative preemption, bringing that capability to all four Windows
  ports, which should hopefully address subtle bugs encountered when calling
  into Win32 functions that block for extended periods of time.
</p>

<h3 id="ios">iOS</h3>

<p><!-- golang.org/issue/48076, golang.org/issue/49616 -->
  On iOS (the <code>ios/arm64</code> port)
  and iOS simulator running on AMD64-based macOS (the <code>ios/amd64</code> port),
  Go 1.18 now requires iOS 12 or later; support for previous versions has been discontinued.
</p>

<h3 id="freebsd">FreeBSD</h3>

<p>
  Go 1.18 is the last release that is supported on FreeBSD 11.x, which has
  already reached end-of-life. Go 1.19 will require FreeBSD 12.2+ or FreeBSD
  13.0+.
  FreeBSD 13.0+ will require a kernel with the COMPAT_FREEBSD12 option set (this is the default).
</p>

<h2 id="tools">Tools</h2>

<h3 id="fuzzing">Fuzzing</h3>

<p>
  Go 1.18 includes an implementation of fuzzing as described by
  <a href="https://golang.org/issue/44551">the fuzzing proposal</a>.
</p>

<p>
  See the <a href="https://go.dev/doc/fuzz">fuzzing landing page</a> to get
  started.
</p>

<p>
  Please be aware that fuzzing can consume a lot of memory and may impact your
  machine’s performance while it runs. Also be aware that the fuzzing engine
  writes values that expand test coverage to a fuzz cache directory within
  <code>$GOCACHE/fuzz</code> while it runs. There is currently no limit to the
  number of files or total bytes that may be written to the fuzz cache, so it
  may occupy a large amount of storage (possibly several GBs).
</p>

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

<h4 id="go-get"><code>go</code> <code>get</code></h4>

<p><!-- golang.org/issue/43684 -->
  <code>go</code> <code>get</code> no longer builds or installs packages in
  module-aware mode. <code>go</code> <code>get</code> is now dedicated to
  adjusting dependencies in <code>go.mod</code>. Effectively, the
  <code>-d</code> flag is always enabled. To install the latest version
  of an executable outside the context of the current module, use
  <a href="https://golang.org/ref/mod#go-install"><code>go</code>
  <code>install</code> <code>example.com/cmd@latest</code></a>. Any
  <a href="https://golang.org/ref/mod#version-queries">version query</a>
  may be used instead of <code>latest</code>. This form of <code>go</code>
  <code>install</code> was added in Go 1.16, so projects supporting older
  versions may need to provide install instructions for both <code>go</code>
  <code>install</code> and <code>go</code> <code>get</code>. <code>go</code>
  <code>get</code> now reports an error when used outside a module, since there
  is no <code>go.mod</code> file to update. In GOPATH mode (with
  <code>GO111MODULE=off</code>), <code>go</code> <code>get</code> still builds
  and installs packages, as before.
</p>

<h4 id="go-mod-updates">Automatic <code>go.mod</code> and <code>go.sum</code> updates</h4>

<p><!-- https://go.dev/issue/45551 -->
  The <code>go</code> <code>mod</code> <code>graph</code>,
  <code>go</code> <code>mod</code> <code>vendor</code>,
  <code>go</code> <code>mod</code> <code>verify</code>, and
  <code>go</code> <code>mod</code> <code>why</code> subcommands
  no longer automatically update the <code>go.mod</code> and
  <code>go.sum</code> files.
  (Those files can be updated explicitly using <code>go</code> <code>get</code>,
  <code>go</code> <code>mod</code> <code>tidy</code>, or
  <code>go</code> <code>mod</code> <code>download</code>.)
</p>

<h4 id="go-version"><code>go</code> <code>version</code></h4>

<p><!-- golang.org/issue/37475 -->
  The <code>go</code> command now embeds version control information in
  binaries. It includes the currently checked-out revision, commit time, and a
  flag indicating whether edited or untracked files are present. Version
  control information is embedded if the <code>go</code> command is invoked in
  a directory within a Git, Mercurial, Fossil, or Bazaar repository, and the
  <code>main</code> package and its containing main module are in the same
  repository. This information may be omitted using the flag
  <code>-buildvcs=false</code>.
</p>

<p><!-- golang.org/issue/37475 -->
  Additionally, the <code>go</code> command embeds information about the build,
  including build and tool tags (set with <code>-tags</code>), compiler,
  assembler, and linker flags (like <code>-gcflags</code>), whether cgo was
  enabled, and if it was, the values of the cgo environment variables
  (like <code>CGO_CFLAGS</code>).
  Both VCS and build information may be read together with module
  information using
  <code>go</code> <code>version</code> <code>-m</code> <code>file</code> or
  <code>runtime/debug.ReadBuildInfo</code> (for the currently running binary)
  or the new <a href="#debug/buildinfo"><code>debug/buildinfo</code></a>
  package.
</p>

<p><!-- CL 369977 -->
  The underlying data format of the embedded build information can change with
  new go releases, so an older version of <code>go</code> may not handle the
  build information produced with a newer version of <code>go</code>.
  To read the version information from a binary built with <code>go</code> 1.18,
  use the <code>go</code> <code>version</code> command and the
  <code>debug/buildinfo</code> package from <code>go</code> 1.18+.
</p>

<h4 id="go-mod-download"><code>go</code> <code>mod</code> <code>download</code></h4>

<p><!-- https://golang.org/issue/44435 -->
  If the main module's <code>go.mod</code> file
  specifies <a href="/ref/mod#go-mod-file-go"><code>go</code> <code>1.17</code></a>
  or higher, <code>go</code> <code>mod</code> <code>download</code> without
  arguments now downloads source code for only the modules
  explicitly <a href="/ref/mod#go-mod-file-require">required</a> in the main
  module's <code>go.mod</code> file. (In a <code>go</code> <code>1.17</code> or
  higher module, that set already includes all dependencies needed to build the
  packages and tests in the main module.)
  To also download source code for transitive dependencies, use
  <code>go</code> <code>mod</code> <code>download</code> <code>all</code>.
</p>

<h4 id="go-mod-vendor"><code>go</code> <code>mod</code> <code>vendor</code></h4>

<p><!-- https://golang.org/issue/47327 -->
  The <code>go</code> <code>mod</code> <code>vendor</code> subcommand now
  supports a <code>-o</code> flag to set the output directory.
  (Other <code>go</code> commands still read from the <code>vendor</code>
  directory at the module root when loading packages
  with <code>-mod=vendor</code>, so the main use for this flag is for
  third-party tools that need to collect package source code.)
</p>

<h4 id="go-mod-tidy"><code>go</code> <code>mod</code> <code>tidy</code></h4>

<p><!-- https://golang.org/issue/47738, CL 344572 -->
  The <code>go</code> <code>mod</code> <code>tidy</code> command now retains
  additional checksums in the <code>go.sum</code> file for modules whose source
  code is needed to verify that each imported package is provided by only one
  module in the <a href="/ref/mod#glos-build-list">build list</a>. Because this
  condition is rare and failure to apply it results in a build error, this
  change is <em>not</em> conditioned on the <code>go</code> version in the main
  module's <code>go.mod</code> file.
</p>

<h4 id="go-work"><code>go</code> <code>work</code></h4>

<p><!-- https://golang.org/issue/45713 -->
  The <code>go</code> command now supports a "Workspace" mode. If a
  <code>go.work</code> file is found in the working directory or a
  parent directory, or one is specified using the <code>GOWORK</code>
  environment variable, it will put the <code>go</code> command into workspace mode.
  In workspace mode, the <code>go.work</code> file will be used to
  determine the set of main modules used as the roots for module
  resolution, instead of using the normally-found <code>go.mod</code>
  file to specify the single main module. For more information see the
  <a href="/pkg/cmd/go#hdr-Workspace_maintenance"><code>go work</code></a>
  documentation.
</p>

<h4 id="go-build-asan"><code>go</code> <code>build</code> <code>-asan</code></h4>

<p><!-- CL 298612 -->
  The <code>go</code> <code>build</code> command and related commands
  now support an <code>-asan</code> flag that enables interoperation
  with C (or C++) code compiled with the address sanitizer (C compiler
  option <code>-fsanitize=address</code>).
</p>

<h4 id="go-test"><code>go</code> <code>test</code></h4>

<p><!-- CL 251441 -->
  The <code>go</code> command now supports additional command line
  options for the new <a href="#fuzzing">fuzzing support described
  above</a>:
  <ul>
    <li>
      <code>go test</code> supports
      <code>-fuzz</code>, <code>-fuzztime</code>, and
      <code>-fuzzminimizetime</code> options.
      For documentation on these see
      <a href="/pkg/cmd/go#hdr-Testing_flags"><code>go help testflag</code></a>.
    </li>
    <li>
      <code>go clean</code> supports a <code>-fuzzcache</code>
      option.
      For documentation see
      <a href="/pkg/cmd/go#hdr-Remove_object_files_and_cached_files"><code>go help clean</code></a>.
    </li>
  </ul>
</p>

<h4 id="go-build-lines"><code>//go:build</code> lines</h4>

<p><!-- CL 240611 -->
Go 1.17 introduced <code>//go:build</code> lines as a more readable way to write build constraints,
instead of <code>//</code> <code>+build</code> lines.
As of Go 1.17, <code>gofmt</code> adds <code>//go:build</code> lines
to match existing <code>+build</code> lines and keeps them in sync,
while <code>go</code> <code>vet</code> diagnoses when they are out of sync.
</p>

<p>Since the release of Go 1.18 marks the end of support for Go 1.16,
all supported versions of Go now understand <code>//go:build</code> lines.
In Go 1.18, <code>go</code> <code>fix</code> now removes the now-obsolete
<code>//</code> <code>+build</code> lines in modules declaring
<code>go</code> <code>1.17</code> or later in their <code>go.mod</code> files.
</p>

<p>
For more information, see <a href="https://go.dev/design/draft-gobuild">https://go.dev/design/draft-gobuild</a>.
</p>

<h3 id="gofmt">Gofmt</h3>

<p><!-- https://golang.org/issue/43566 -->
  <code>gofmt</code> now reads and formats input files concurrently, with a
  memory limit proportional to <code>GOMAXPROCS</code>. On a machine with
  multiple CPUs, <code>gofmt</code> should now be significantly faster.
</p>

<h3 id="vet">Vet</h3>

<h4 id="vet-generics">Updates for Generics</h4>

<p><!-- https://golang.org/issue/48704 -->
	The <code>vet</code> tool is updated to support generic code. In most cases,
	it reports an error in generic code whenever it would report an error in the
	equivalent non-generic code after substituting for type parameters with a
	type from their
	<a href="https://golang.org/ref/spec#Interface_types">type set</a>.

	For example, <code>vet</code> reports a format error in
	<pre>func Print[T ~int|~string](t T) {
	fmt.Printf("%d", t)
}</pre>
	because it would report a format error in the non-generic equivalent of
	<code>Print[string]</code>:
	<pre>func PrintString(x string) {
	fmt.Printf("%d", x)
}</pre>
</p>

<h4 id="vet-precision">Precision improvements for existing checkers</h4>

<p><!-- CL 323589 356830 319689 355730 351553 338529 -->
  The <code>cmd/vet</code> checkers <code>copylock</code>, <code>printf</code>,
  <code>sortslice</code>, <code>testinggoroutine</code>, and <code>tests</code>
  have all had moderate precision improvements to handle additional code patterns.
  This may lead to newly reported errors in existing packages. For example, the
  <code>printf</code> checker now tracks formatting strings created by
  concatenating string constants. So <code>vet</code> will report an error in:
<pre>
  // fmt.Printf formatting directive %d is being passed to Println.
  fmt.Println("%d"+` ≡ x (mod 2)`+"\n", x%2)
</pre>
</p>

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

<p><!-- https://golang.org/issue/44167 -->
  The garbage collector now includes non-heap sources of garbage collector work
  (e.g., stack scanning) when determining how frequently to run. As a result,
  garbage collector overhead is more predictable when these sources are
  significant. For most applications these changes will be negligible; however,
  some Go applications may now use less memory and spend more time on garbage
  collection, or vice versa, than before. The intended workaround is to tweak
  <code>GOGC</code> where necessary.
</p>

<p><!-- CL 358675, CL 353975, CL 353974 -->
  The runtime now returns memory to the operating system more efficiently and has
  been tuned to work more aggressively as a result.
</p>

<p><!-- CL 352057, https://golang.org/issue/45728 -->
  Go 1.17 generally improved the formatting of arguments in stack traces,
  but could print inaccurate values for arguments passed in registers.
  This is improved in Go 1.18 by printing a question mark (<code>?</code>)
  after each value that may be inaccurate.
</p>

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

<p><!-- https://golang.org/issue/40724 -->
  Go 1.17 <a href="go1.17#compiler">implemented</a> a new way of passing
  function arguments and results using registers instead of the stack
  on 64-bit x86 architecture on selected operating systems.
  Go 1.18 expands the supported platforms to include 64-bit ARM (<code>GOARCH=arm64</code>),
  big- and little-endian 64-bit PowerPC (<code>GOARCH=ppc64</code>, <code>ppc64le</code>),
  as well as 64-bit x86 architecture (<code>GOARCH=amd64</code>)
  on all operating systems.
  On 64-bit ARM and 64-bit PowerPC systems, benchmarking shows
  typical performance improvements of 10% or more.
</p>

<p>
  As <a href="go1.17#compiler">mentioned</a> in the Go 1.17 release notes,
  this change does not affect the functionality of any safe Go code and
  is designed to have no impact on most assembly code. See the
  <a href="go1.17#compiler">Go 1.17 release notes</a> for more details.
</p>

<p><!-- CL 355497, CL 356869 -->
  The compiler now can inline functions that contain range loops or
  labeled for loops.
</p>

<p><!-- CL 298611 -->
  The new <code>-asan</code> compiler option supports the
  new <code>go</code> command <code>-asan</code> option.
</p>

<p><!-- https://golang.org/issue/50954 -->
  Because the compiler's type checker was replaced in its entirety to
  support generics, some error messages now may use different wording
  than before. In some cases, pre-Go 1.18 error messages provided more
  detail or were phrased in a more helpful way.
  We intend to address these cases in Go 1.19.
</p>

<p> <!-- https://github.com/golang/go/issues/49569 -->
  Because of changes in the compiler related to supporting generics, the
  Go 1.18 compile speed can be roughly 15% slower than the Go 1.17 compile speed.
  The execution time of the compiled code is not affected.  We
  intend to improve the speed of the compiler in Go 1.19.
</p>

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

<p>
  The linker emits <a href="https://tailscale.com/blog/go-linker/">far fewer relocations</a>.
  As a result, most codebases will link faster, require less memory to link,
  and generate smaller binaries.
  Tools that process Go binaries should use Go 1.18's <code>debug/gosym</code> package
  to transparently handle both old and new binaries.
</p>

<p><!-- CL 298610 -->
  The new <code>-asan</code> linker option supports the
  new <code>go</code> command <code>-asan</code> option.
</p>

<h2 id="bootstrap">Bootstrap</h2>

<p><!-- CL 369914, CL 370274 -->
When building a Go release from source and <code>GOROOT_BOOTSTRAP</code>
is not set, previous versions of Go looked for a Go 1.4 or later bootstrap toolchain
in the directory <code>$HOME/go1.4</code> (<code>%HOMEDRIVE%%HOMEPATH%\go1.4</code> on Windows).
Go now looks first for <code>$HOME/go1.17</code> or <code>$HOME/sdk/go1.17</code>
before falling back to <code>$HOME/go1.4</code>.
We intend for Go 1.19 to require Go 1.17 or later for bootstrap,
and this change should make the transition smoother.
For more details, see <a href="https://go.dev/issue/44505">go.dev/issue/44505</a>.
</p>

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

<h3 id="debug/buildinfo">New <code>debug/buildinfo</code> package</h3>

<p><!-- golang.org/issue/39301 -->
  The new <a href="/pkg/debug/buildinfo"><code>debug/buildinfo</code></a> package
  provides access to module versions, version control information, and build
  flags embedded in executable files built by the <code>go</code> command.
  The same information is also available via
  <a href="/pkg/runtime/debug#ReadBuildInfo"><code>runtime/debug.ReadBuildInfo</code></a>
  for the currently running binary and via <code>go</code>
  <code>version</code> <code>-m</code> on the command line.
</p>

<h3 id="netip">New <code>net/netip</code> package</h3>

<p>
  The new <a href="/pkg/net/netip/"><code>net/netip</code></a>
  package defines a new IP address type, <a href="/pkg/net/netip/#Addr"><code>Addr</code></a>.
  Compared to the existing
  <a href="/pkg/net/#IP"><code>net.IP</code></a> type, the <code>netip.Addr</code> type takes less
  memory, is immutable, and is comparable so it supports <code>==</code>
  and can be used as a map key.
</p>
<p>
  In addition to <code>Addr</code>, the package defines
  <a href="/pkg/net/netip/#AddrPort"><code>AddrPort</code></a>, representing
  an IP and port, and
  <a href="/pkg/net/netip/#Prefix"><code>Prefix</code></a>, representing
  a network CIDR prefix.
</p>
<p>
  The package also defines several functions to create and examine
  these new types:
  <a href="/pkg/net/netip#AddrFrom4"><code>AddrFrom4</code></a>,
  <a href="/pkg/net/netip#AddrFrom16"><code>AddrFrom16</code></a>,
  <a href="/pkg/net/netip#AddrFromSlice"><code>AddrFromSlice</code></a>,
  <a href="/pkg/net/netip#AddrPortFrom"><code>AddrPortFrom</code></a>,
  <a href="/pkg/net/netip#IPv4Unspecified"><code>IPv4Unspecified</code></a>,
  <a href="/pkg/net/netip#IPv6LinkLocalAllNodes"><code>IPv6LinkLocalAllNodes</code></a>,
  <a href="/pkg/net/netip#IPv6Unspecified"><code>IPv6Unspecified</code></a>,
  <a href="/pkg/net/netip#MustParseAddr"><code>MustParseAddr</code></a>,
  <a href="/pkg/net/netip#MustParseAddrPort"><code>MustParseAddrPort</code></a>,
  <a href="/pkg/net/netip#MustParsePrefix"><code>MustParsePrefix</code></a>,
  <a href="/pkg/net/netip#ParseAddr"><code>ParseAddr</code></a>,
  <a href="/pkg/net/netip#ParseAddrPort"><code>ParseAddrPort</code></a>,
  <a href="/pkg/net/netip#ParsePrefix"><code>ParsePrefix</code></a>,
  <a href="/pkg/net/netip#PrefixFrom"><code>PrefixFrom</code></a>.
</p>
<p>
  The <a href="/pkg/net/"><code>net</code></a> package includes new
  methods that parallel existing methods, but
  return <code>netip.AddrPort</code> instead of the
  heavier-weight <a href="/pkg/net/#IP"><code>net.IP</code></a> or
  <a href="/pkg/net/#UDPAddr"><code>*net.UDPAddr</code></a> types:
  <a href="/pkg/net/#Resolver.LookupNetIP"><code>Resolver.LookupNetIP</code></a>,
  <a href="/pkg/net/#UDPConn.ReadFromUDPAddrPort"><code>UDPConn.ReadFromUDPAddrPort</code></a>,
  <a href="/pkg/net/#UDPConn.ReadMsgUDPAddrPort"><code>UDPConn.ReadMsgUDPAddrPort</code></a>,
  <a href="/pkg/net/#UDPConn.WriteToUDPAddrPort"><code>UDPConn.WriteToUDPAddrPort</code></a>,
  <a href="/pkg/net/#UDPConn.WriteMsgUDPAddrPort"><code>UDPConn.WriteMsgUDPAddrPort</code></a>.
  The new <code>UDPConn</code> methods support allocation-free I/O.
</p>
<p>
  The <code>net</code> package also now includes functions and methods
  to convert between the existing
  <a href="/pkg/net/#TCPAddr"><code>TCPAddr</code></a>/<a href="/pkg/net/#UDPAddr"><code>UDPAddr</code></a>
  types and <code>netip.AddrPort</code>:
  <a href="/pkg/net/#TCPAddrFromAddrPort"><code>TCPAddrFromAddrPort</code></a>,
  <a href="/pkg/net/#UDPAddrFromAddrPort"><code>UDPAddrFromAddrPort</code></a>,
  <a href="/pkg/net/#TCPAddr.AddrPort"><code>TCPAddr.AddrPort</code></a>,
  <a href="/pkg/net/#UDPAddr.AddrPort"><code>UDPAddr.AddrPort</code></a>.
</p>

<h3 id="tls10">TLS 1.0 and 1.1 disabled by default client-side</h3>

<p><!-- CL 359779, golang.org/issue/45428 -->
  If <a href="/pkg/crypto/tls/#Config.MinVersion"><code>Config.MinVersion</code></a>
  is not set, it now defaults to TLS 1.2 for client connections. Any safely
  up-to-date server is expected to support TLS 1.2, and browsers have required
  it since 2020. TLS 1.0 and 1.1 are still supported by setting
  <code>Config.MinVersion</code> to <code>VersionTLS10</code>.
  The server-side default is unchanged at TLS 1.0.
</p>

<p>
  The default can be temporarily reverted to TLS 1.0 by setting the
  <code>GODEBUG=tls10default=1</code> environment variable.
  This option will be removed in Go 1.19.
</p>

<h3 id="sha1">Rejecting SHA-1 certificates</h3>

<p><!-- CL 359777, golang.org/issue/41682 -->
  <code>crypto/x509</code> will now
  reject certificates signed with the SHA-1 hash function. This doesn't
  apply to self-signed root certificates. Practical attacks against SHA-1
  <a href="https://shattered.io/">have been demonstrated since 2017</a> and publicly
  trusted Certificate Authorities have not issued SHA-1 certificates since 2015.
</p>

<p>
  This can be temporarily reverted by setting the
  <code>GODEBUG=x509sha1=1</code> environment variable.
  This option will be removed in Go 1.19.
</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.
</p>

<dl id="bufio"><dt><a href="/pkg/bufio/">bufio</a></dt>
  <dd>
    <p><!-- CL 345569 -->
      The new <a href="/pkg/bufio#Writer.AvailableBuffer"><code>Writer.AvailableBuffer</code></a>
      method returns an empty buffer with a possibly non-empty capacity for use
      with append-like APIs. After appending, the buffer can be provided to a
      succeeding <code>Write</code> call and possibly avoid any copying.
    </p>

    <p><!-- CL 345570 -->
      The <a href="/pkg/bufio#Reader.Reset"><code>Reader.Reset</code></a> and
      <a href="/pkg/bufio#Writer.Reset"><code>Writer.Reset</code></a> methods
      now use the default buffer size when called on objects with a
      <code>nil</code> buffer.
    </p>
  </dd>
</dl><!-- bufio -->

<dl id="bytes"><dt><a href="/pkg/bytes/">bytes</a></dt>
  <dd>
    <p><!-- CL 351710 -->
      The new <a href="/pkg/bytes/#Cut"><code>Cut</code></a> function
      slices a <code>[]byte</code> around a separator. It can replace
      and simplify many common uses of
      <a href="/pkg/bytes/#Index"><code>Index</code></a>,
      <a href="/pkg/bytes/#IndexByte"><code>IndexByte</code></a>,
      <a href="/pkg/bytes/#IndexRune"><code>IndexRune</code></a>,
      and <a href="/pkg/bytes/#SplitN"><code>SplitN</code></a>.
    </p>

    <p><!-- CL 323318, CL 332771 -->
      <a href="/pkg/bytes/#Trim"><code>Trim</code></a>, <a href="/pkg/bytes/#TrimLeft"><code>TrimLeft</code></a>,
      and <a href="/pkg/bytes/#TrimRight"><code>TrimRight</code></a> are now allocation free and, especially for
      small ASCII cutsets, up to 10 times faster.
    </p>

    <p><!-- CL 359485 -->
      The <a href="/pkg/bytes/#Title"><code>Title</code></a> function is now deprecated. It doesn't
      handle Unicode punctuation and language-specific capitalization rules, and is superseded by the
      <a href="https://golang.org/x/text/cases">golang.org/x/text/cases</a> package.
    </p>
  </dd>
</dl><!-- bytes -->

<dl id="crypto/elliptic"><dt><a href="/pkg/crypto/elliptic/">crypto/elliptic</a></dt>
  <dd>
    <p><!-- CL 320071, CL 320072, CL 320074, CL 361402, CL 360014 -->
      The <a href="/pkg/crypto/elliptic#P224"><code>P224</code></a>,
      <a href="/pkg/crypto/elliptic#P384"><code>P384</code></a>, and
      <a href="/pkg/crypto/elliptic#P521"><code>P521</code></a> curve
      implementations are now all backed by code generated by the
      <a href="https://github.com/mmcloughlin/addchain">addchain</a> and
      <a href="https://github.com/mit-plv/fiat-crypto">fiat-crypto</a>
      projects, the latter of which is based on a formally-verified model
      of the arithmetic operations. They now use safer complete formulas
      and internal APIs. P-224 and P-384 are now approximately four times
      faster. All specific curve implementations are now constant-time.
    </p>

    <p>
      Operating on invalid curve points (those for which the
      <code>IsOnCurve</code> method returns false, and which are never returned
      by <a href="/pkg/crypto/elliptic#Unmarshal"><code>Unmarshal</code></a> or
      a <code>Curve</code> method operating on a valid point) has always been
      undefined behavior, can lead to key recovery attacks, and is now
      unsupported by the new backend. If an invalid point is supplied to a
      <code>P224</code>, <code>P384</code>, or <code>P521</code> method, that
      method will now return a random point. The behavior might change to an
      explicit panic in a future release.
    </p>
  </dd>
</dl><!-- crypto/elliptic -->

<dl id="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
  <dd>
    <p><!-- CL 325250 -->
      The new <a href="/pkg/crypto/tls/#Conn.NetConn"><code>Conn.NetConn</code></a>
      method allows access to the underlying
      <a href="/pkg/net#Conn"><code>net.Conn</code></a>.
    </p>
  </dd>
</dl><!-- crypto/tls -->

<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509">crypto/x509</a></dt>
  <dd>
    <p><!-- CL 353132, CL 353403 -->
      <a href="/pkg/crypto/x509/#Certificate.Verify"><code>Certificate.Verify</code></a>
      now uses platform APIs to verify certificate validity on macOS and iOS when it
      is called with a nil
      <a href="/pkg/crypto/x509/#VerifyOpts.Roots"><code>VerifyOpts.Roots</code></a>
      or when using the root pool returned from
      <a href="/pkg/crypto/x509/#SystemCertPool"><code>SystemCertPool</code></a>.
    </p>

    <p><!-- CL 353589 -->
      <a href="/pkg/crypto/x509/#SystemCertPool"><code>SystemCertPool</code></a>
      is now available on Windows.
    </p>

    <p>
      On Windows, macOS, and iOS, when a
      <a href="/pkg/crypto/x509/#CertPool"><code>CertPool</code></a> returned by
      <a href="/pkg/crypto/x509/#SystemCertPool"><code>SystemCertPool</code></a>
      has additional certificates added to it,
      <a href="/pkg/crypto/x509/#Certificate.Verify"><code>Certificate.Verify</code></a>
      will do two verifications: one using the platform verifier APIs and the
      system roots, and one using the Go verifier and the additional roots.
      Chains returned by the platform verifier APIs will be prioritized.
    </p>

    <p>
      <a href="/pkg/crypto/x509/#CertPool.Subjects"><code>CertPool.Subjects</code></a>
      is deprecated. On Windows, macOS, and iOS the
      <a href="/pkg/crypto/x509/#CertPool"><code>CertPool</code></a> returned by
      <a href="/pkg/crypto/x509/#SystemCertPool"><code>SystemCertPool</code></a>
      will return a pool which does not include system roots in the slice
      returned by <code>Subjects</code>, as a static list can't appropriately
      represent the platform policies and might not be available at all from the
      platform APIs.
    </p>
  </dd>
</dl>

<dl id="debug/dwarf"><dt><a href="/pkg/debug/dwarf/">debug/dwarf</a></dt>
  <dd>
    <p><!-- CL 380714 -->
      The <a href="/pkg/debug/dwarf#StructField"><code>StructField</code></a>
      and <a href="/pkg/debug/dwarf#BasicType"><code>BasicType</code></a>
      structs both now have a <code>DataBitOffset</code> field, which
      holds the value of the <code>DW_AT_data_bit_offset</code>
      attribute if present.
  </dd>
</dl>

<dl id="debug/elf"><dt><a href="/pkg/debug/elf/">debug/elf</a></dt>
  <dd>
    <p><!-- CL 352829 -->
      The <a href="/pkg/debug/elf/#R_PPC64_RELATIVE"><code>R_PPC64_RELATIVE</code></a>
      constant has been added.
    </p>
  </dd>
</dl><!-- debug/elf -->

<dl id="debug/plan9obj"><dt><a href="/pkg/debug/plan9obj/">debug/plan9obj</a></dt>
  <dd>
    <p><!-- CL 350229 -->
      The <a href="/pkg/debug/plan9obj#File.Symbols">File.Symbols</a>
      method now returns the new exported error
      value <a href="/pkg/debug/plan9obj#ErrNoSymbols">ErrNoSymbols</a>
      if the file has no symbol section.
    </p>
  </dd>
</dl><!-- debug/plan9obj -->

<dl id="go/ast"><dt><a href="/pkg/go/ast/">go/ast</a></dt>
  <dd>
    <p><!-- https://golang.org/issue/47781, CL 325689, CL 327149, CL 348375, CL 348609 -->
      Per the proposal
      <a href="https://go.googlesource.com/proposal/+/master/design/47781-parameterized-go-ast.md">
        Additions to go/ast and go/token to support parameterized functions and types
      </a>
      the following additions are made to the <a href="/pkg/go/ast"><code>go/ast</code></a> package:
      <ul>
        <li>
          the <a href="/pkg/go/ast/#FuncType"><code>FuncType</code></a>
          and <a href="/pkg/go/ast/#TypeSpec"><code>TypeSpec</code></a>
          nodes have a new field <code>TypeParams</code> to hold type parameters, if any.
        </li>
        <li>
          The new expression node <a href="/pkg/go/ast/#IndexListExpr"><code>IndexListExpr</code></a>
          represents index expressions with multiple indices, used for function and type instantiations
          with more than one explicit type argument.
        </li>
      </ul>
    </p>
  </dd>
</dl>

<dl id="go/constant"><dt><a href="/pkg/go/constant/">go/constant</a></dt>
  <dd>
    <p><!-- https://golang.org/issue/46211, CL 320491 -->
      The new <a href="/pkg/go/constant/#Kind.String"><code>Kind.String</code></a>
      method returns a human-readable name for the receiver kind.
    </p>
  </dd>
</dl>

<dl id="go/token"><dt><a href="/pkg/go/token/">go/token</a></dt>
  <dd>
    <p><!-- https://golang.org/issue/47781, CL 324992 -->
      The new constant <a href="/pkg/go/token/#TILDE"><code>TILDE</code></a>
      represents the <code>~</code> token per the proposal
      <a href="https://go.googlesource.com/proposal/+/master/design/47781-parameterized-go-ast.md">
        Additions to go/ast and go/token to support parameterized functions and types
      </a>.
    </p>
  </dd>
</dl>

<dl id="go/types"><dt><a href="/pkg/go/types/">go/types</a></dt>
  <dd>
    <p><!-- https://golang.org/issue/46648 -->
      The new <a href="/pkg/go/types/#Config.GoVersion"><code>Config.GoVersion</code></a>
      field sets the accepted Go language version.
    </p>

    <p><!-- https://golang.org/issue/47916 -->
      Per the proposal
      <a href="https://go.googlesource.com/proposal/+/master/design/47916-parameterized-go-types.md">
        Additions to go/types to support type parameters
      </a>
      the following additions are made to the <a href="/pkg/go/types"><code>go/types</code></a> package:
    </p>
    <ul>
      <li>
        The new type
        <a href="/pkg/go/types/#TypeParam"><code>TypeParam</code></a>, factory function
        <a href="/pkg/go/types/#NewTypeParam"><code>NewTypeParam</code></a>,
        and associated methods are added to represent a type parameter.
      </li>
      <li>
        The new type
        <a href="/pkg/go/types/#TypeParamList"><code>TypeParamList</code></a> holds a list of
        type parameters.
      </li>
      <li>
        The new type
        <a href="/pkg/go/types/#TypeList"><code>TypeList</code></a> holds a list of types.
      </li>
      <li>
        The new factory function
        <a href="/pkg/go/types/#NewSignatureType"><code>NewSignatureType</code></a> allocates a
        <a href="/pkg/go/types/#Signature"><code>Signature</code></a> with
        (receiver or function) type parameters.
        To access those type parameters, the <code>Signature</code> type has two new methods
        <a href="/pkg/go/types/#Signature.RecvTypeParams"><code>Signature.RecvTypeParams</code></a> and
        <a href="/pkg/go/types/#Signature.TypeParams"><code>Signature.TypeParams</code></a>.
      </li>
      <li>
        <a href="/pkg/go/types/#Named"><code>Named</code></a> types have four new methods:
        <a href="/pkg/go/types/#Named.Origin"><code>Named.Origin</code></a> to get the original
        parameterized types of instantiated types,
        <a href="/pkg/go/types/#Named.TypeArgs"><code>Named.TypeArgs</code></a> and
        <a href="/pkg/go/types/#Named.TypeParams"><code>Named.TypeParams</code></a> to get the
        type arguments or type parameters of an instantiated or parameterized type, and
        <a href="/pkg/go/types/#Named.TypeParams"><code>Named.SetTypeParams</code></a> to set the
        type parameters (for instance, when importing a named type where allocation of the named
        type and setting of type parameters cannot be done simultaneously due to possible cycles).
      </li>
      <li>
        The <a href="/pkg/go/types/#Interface"><code>Interface</code></a> type has four new methods:
        <a href="/pkg/go/types/#Interface.IsComparable"><code>Interface.IsComparable</code></a> and
        <a href="/pkg/go/types/#Interface.IsMethodSet"><code>Interface.IsMethodSet</code></a> to
        query properties of the type set defined by the interface, and
        <a href="/pkg/go/types/#Interface.MarkImplicit"><code>Interface.MarkImplicit</code></a> and
        <a href="/pkg/go/types/#Interface.IsImplicit"><code>Interface.IsImplicit</code></a> to set
        and test whether the interface is an implicit interface around a type constraint literal.
      </li>
      <li>
        The new types
        <a href="/pkg/go/types/#Union"><code>Union</code></a> and
        <a href="/pkg/go/types/#Term"><code>Term</code></a>, factory functions
        <a href="/pkg/go/types/#NewUnion"><code>NewUnion</code></a> and
        <a href="/pkg/go/types/#NewTerm"><code>NewTerm</code></a>, and associated
        methods are added to represent type sets in interfaces.
      </li>
      <li>
        The new function
        <a href="/pkg/go/types/#Instantiate"><code>Instantiate</code></a>
        instantiates a parameterized type.
      </li>
      <li>
        The new <a href="/pkg/go/types/#Info.Instances"><code>Info.Instances</code></a>
        map records function and type instantiations through the new
        <a href="/pkg/go/types/#Instance"><code>Instance</code></a> type.
      </li>
      <li><!-- CL 342671 -->
        The new type <a href="/pkg/go/types/#ArgumentError"><code>ArgumentError</code></a>
        and associated methods are added to represent an error related to a type argument.
      </li>
      <li><!-- CL 353089 -->
        The new type <a href="/pkg/go/types/#Context"><code>Context</code></a> and factory function
        <a href="/pkg/go/types/#NewContext"><code>NewContext</code></a>
        are added to facilitate sharing of identical type instances
        across type-checked packages, via the new
        <a href="/pkg/go/types/#Config.Context"><code>Config.Context</code></a>
        field.
      </li>
    </ul>
    <p>
      The predicates
      <a href="/pkg/go/types/#AssignableTo"><code>AssignableTo</code></a>,
      <a href="/pkg/go/types/#ConvertibleTo"><code>ConvertibleTo</code></a>,
      <a href="/pkg/go/types/#Implements"><code>Implements</code></a>,
      <a href="/pkg/go/types/#Identical"><code>Identical</code></a>,
      <a href="/pkg/go/types/#IdenticalIgnoreTags"><code>IdenticalIgnoreTags</code></a>, and
      <a href="/pkg/go/types/#AssertableTo"><code>AssertableTo</code></a>
      now also work with arguments that are or contain generalized interfaces, i.e. interfaces
      that may only be used as type constraints in Go code.
      Note that the behavior of <code>AssertableTo</code> is undefined if the first argument
      is a generalized interface.
    </p>
  </dd>
</dl>

<dl id="html/template"><dt><a href="/pkg/html/template/">html/template</a></dt>
  <dd>
    <p><!-- CL 321491 -->
      Within a <code>range</code> pipeline the new
      <code>{{break}}</code> command will end the loop early and the
      new <code>{{continue}}</code> command will immediately start the
      next loop iteration.
    </p>

    <p><!-- CL 321490 -->
      The <code>and</code> function no longer always evaluates all arguments; it
      stops evaluating arguments after the first argument that evaluates to
      false.  Similarly, the <code>or</code> function now stops evaluating
      arguments after the first argument that evaluates to true. This makes a
      difference if any of the arguments is a function call.
    </p>
  </dd>
</dl><!-- html/template -->

<dl id="image/draw"><dt><a href="/pkg/image/draw/">image/draw</a></dt>
  <dd>
    <p><!-- CL 340049 -->
      The <code>Draw</code> and <code>DrawMask</code> fallback implementations
      (used when the arguments are not the most common image types) are now
      faster when those arguments implement the optional
      <a href="/pkg/image/draw/#RGBA64Image"><code>draw.RGBA64Image</code></a>
      and <a href="/pkg/image/#RGBA64Image"><code>image.RGBA64Image</code></a>
      interfaces that were added in Go 1.17.
    </p>
  </dd>
</dl><!-- image/draw -->

<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
  <dd>
    <p><!-- CL 340261 -->
      <a href="/pkg/net#Error"><code>net.Error.Temporary</code></a> has been deprecated.
    </p>
  </dd>
</dl><!-- net -->

<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
  <dd>
    <p><!-- CL 330852 -->
      On WebAssembly targets, the <code>Dial</code>, <code>DialContext</code>,
      <code>DialTLS</code> and <code>DialTLSContext</code> method fields in
      <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
      will now be correctly used, if specified, for making HTTP requests.
    </p>

    <p><!-- CL 338590 -->
      The new
      <a href="/pkg/net/http#Cookie.Valid"><code>Cookie.Valid</code></a>
      method reports whether the cookie is valid.
    </p>

    <p><!-- CL 346569 -->
      The new
      <a href="/pkg/net/http#MaxBytesHandler"><code>MaxBytesHandler</code></a>
      function creates a <code>Handler</code> that wraps its
      <code>ResponseWriter</code> and <code>Request.Body</code> with a
      <a href="/pkg/net/http#MaxBytesReader"><code>MaxBytesReader</code></a>.
    </p>
  </dd>
</dl><!-- net/http -->

<dl id="os/user"><dt><a href="/pkg/os/user/">os/user</a></dt>
  <dd>
    <p><!-- CL 330753 -->
      <a href="/pkg/os/user#User.GroupIds"><code>User.GroupIds</code></a>
      now uses a Go native implementation when cgo is not available.
    </p>
  </dd>
</dl><!-- os/user -->

<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  <dd>
    <p><!-- CL 356049, CL 320929 -->
      The new
      <a href="/pkg/reflect/#Value.SetIterKey"><code>Value.SetIterKey</code></a>
      and <a href="/pkg/reflect/#Value.SetIterValue"><code>Value.SetIterValue</code></a>
      methods set a Value using a map iterator as the source. They are equivalent to
      <code>Value.Set(iter.Key())</code> and <code>Value.Set(iter.Value())</code>, but
      do fewer allocations.
    </p>

    <p><!-- CL 350691 -->
      The new
      <a href="/pkg/reflect/#Value.UnsafePointer"><code>Value.UnsafePointer</code></a>
      method returns the Value's value as an <a href="/pkg/unsafe/#Pointer"><code>unsafe.Pointer</code></a>.
      This allows callers to migrate from <a href="/pkg/reflect/#Value.UnsafeAddr"><code>Value.UnsafeAddr</code></a>
      and <a href="/pkg/reflect/#Value.Pointer"><code>Value.Pointer</code></a>
      to eliminate the need to perform uintptr to unsafe.Pointer conversions at the callsite (as unsafe.Pointer rules require).
    </p>

    <p><!-- CL 321891 -->
      The new
      <a href="/pkg/reflect/#MapIter.Reset"><code>MapIter.Reset</code></a>
      method changes its receiver to iterate over a
      different map. The use of
      <a href="/pkg/reflect/#MapIter.Reset"><code>MapIter.Reset</code></a>
      allows allocation-free iteration
      over many maps.
    </p>

    <p><!-- CL 352131 -->
      A number of methods (
      <a href="/pkg/reflect#Value.CanInt"><code>Value.CanInt</code></a>,
      <a href="/pkg/reflect#Value.CanUint"><code>Value.CanUint</code></a>,
      <a href="/pkg/reflect#Value.CanFloat"><code>Value.CanFloat</code></a>,
      <a href="/pkg/reflect#Value.CanComplex"><code>Value.CanComplex</code></a>
      )
      have been added to
      <a href="/pkg/reflect#Value"><code>Value</code></a>
      to test if a conversion is safe.
    </p>

    <p><!-- CL 357962 -->
      <a href="/pkg/reflect#Value.FieldByIndexErr"><code>Value.FieldByIndexErr</code></a>
      has been added to avoid the panic that occurs in
      <a href="/pkg/reflect#Value.FieldByIndex"><code>Value.FieldByIndex</code></a>
      when stepping through a nil pointer to an embedded struct.
    </p>

    <p><!-- CL 341333 -->
      <a href="/pkg/reflect#Ptr"><code>reflect.Ptr</code></a> and
      <a href="/pkg/reflect#PtrTo"><code>reflect.PtrTo</code></a>
      have been renamed to
      <a href="/pkg/reflect#Pointer"><code>reflect.Pointer</code></a> and
      <a href="/pkg/reflect#PointerTo"><code>reflect.PointerTo</code></a>,
      respectively, for consistency with the rest of the reflect package.
      The old names will continue to work, but will be deprecated in a
      future Go release.
    </p>
  </dd><!-- CL 321889 and CL 345486 are optimizations, no need to mention. -->
</dl><!-- reflect -->

<dl id="regexp"><dt><a href="/pkg/regexp/">regexp</a></dt>
  <dd>
    <p><!-- CL 354569 -->
      <a href="/pkg/regexp/"><code>regexp</code></a>
      now treats each invalid byte of a UTF-8 string as <code>U+FFFD</code>.
    </p>
  </dd>
</dl><!-- regexp -->

<dl id="runtime/debug"><dt><a href="/pkg/runtime/debug/">runtime/debug</a></dt>
  <dd>
    <p><!-- CL 354569 -->
      The <a href="/pkg/runtime/debug#BuildInfo"><code>BuildInfo</code></a>
      struct has two new fields, containing additional information
      about how the binary was built:
      <ul>
	<li><a href="/pkg/runtime/debug#BuildInfo.GoVersion"><code>GoVersion</code></a>
	  holds the version of Go used to build the binary.
	</li>
	<li>
	  <a href="/pkg/runtime/debug#BuildInfo.Settings"><code>Settings</code></a>
	  is a slice of
	  <a href="/pkg/runtime/debug#BuildSettings"><code>BuildSettings</code></a>
	  structs holding key/value pairs describing the build.
	</li>
      </ul>
    </p>
  </dd>
</dl><!-- runtime/debug -->

<dl id="runtime/pprof"><dt><a href="/pkg/runtime/pprof/">runtime/pprof</a></dt>
  <dd>
    <p><!-- CL 324129 -->
      The CPU profiler now uses per-thread timers on Linux. This increases the
      maximum CPU usage that a profile can observe, and reduces some forms of
      bias.
    </p>
  </dd>
</dl><!-- runtime/pprof -->

<dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
  <dd>
    <p><!-- CL 343877 -->
      <a href="/pkg/strconv/#strconv.Unquote"><code>strconv.Unquote</code></a>
      now rejects Unicode surrogate halves.
    </p>
  </dd>
</dl><!-- strconv -->

<dl id="strings"><dt><a href="/pkg/strings/">strings</a></dt>
  <dd>
    <p><!-- CL 351710 -->
      The new <a href="/pkg/strings/#Cut"><code>Cut</code></a> function
      slices a <code>string</code> around a separator. It can replace
      and simplify many common uses of
      <a href="/pkg/strings/#Index"><code>Index</code></a>,
      <a href="/pkg/strings/#IndexByte"><code>IndexByte</code></a>,
      <a href="/pkg/strings/#IndexRune"><code>IndexRune</code></a>,
      and <a href="/pkg/strings/#SplitN"><code>SplitN</code></a>.
    </p>

    <p><!-- CL 345849 -->
      The new <a href="/pkg/strings/#Clone"><code>Clone</code></a> function copies the input
      <code>string</code> without the returned cloned <code>string</code> referencing
      the input string's memory.
    </p>

    <p><!-- CL 323318, CL 332771 -->
      <a href="/pkg/strings/#Trim"><code>Trim</code></a>, <a href="/pkg/strings/#TrimLeft"><code>TrimLeft</code></a>,
      and <a href="/pkg/strings/#TrimRight"><code>TrimRight</code></a> are now allocation free and, especially for
      small ASCII cutsets, up to 10 times faster.
    </p>

    <p><!-- CL 359485 -->
      The <a href="/pkg/strings/#Title"><code>Title</code></a> function is now deprecated. It doesn't
      handle Unicode punctuation and language-specific capitalization rules, and is superseded by the
      <a href="https://golang.org/x/text/cases">golang.org/x/text/cases</a> package.
    </p>
  </dd>
</dl><!-- strings -->

<dl id="sync"><dt><a href="/pkg/sync/">sync</a></dt>
  <dd>
    <p><!-- CL 319769 -->
      The new methods
      <a href="/pkg/sync#Mutex.TryLock"><code>Mutex.TryLock</code></a>,
      <a href="/pkg/sync#RWMutex.TryLock"><code>RWMutex.TryLock</code></a>, and
      <a href="/pkg/sync#RWMutex.TryRLock"><code>RWMutex.TryRLock</code></a>,
      will acquire the lock if it is not currently held.
    </p>
  </dd>
</dl><!-- sync -->

<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
  <dd>
    <p><!-- CL 336550 -->
      The new function <a href="/pkg/syscall/?GOOS=windows#SyscallN"><code>SyscallN</code></a>
      has been introduced for Windows, allowing for calls with arbitrary number
      of arguments. As a result,
      <a href="/pkg/syscall/?GOOS=windows#Syscall"><code>Syscall</code></a>,
      <a href="/pkg/syscall/?GOOS=windows#Syscall6"><code>Syscall6</code></a>,
      <a href="/pkg/syscall/?GOOS=windows#Syscall9"><code>Syscall9</code></a>,
      <a href="/pkg/syscall/?GOOS=windows#Syscall12"><code>Syscall12</code></a>,
      <a href="/pkg/syscall/?GOOS=windows#Syscall15"><code>Syscall15</code></a>, and
      <a href="/pkg/syscall/?GOOS=windows#Syscall18"><code>Syscall18</code></a> are
      deprecated in favor of <a href="/pkg/syscall/?GOOS=windows#SyscallN"><code>SyscallN</code></a>.
    </p>

    <p><!-- CL 355570 -->
      <a href="/pkg/syscall/?GOOS=freebsd#SysProcAttr.Pdeathsig"><code>SysProcAttr.Pdeathsig</code></a>
      is now supported in FreeBSD.
    </p>
  </dd>
</dl><!-- syscall -->

<dl id="syscall/js"><dt><a href="/pkg/syscall/js/">syscall/js</a></dt>
  <dd>
    <p><!-- CL 356430 -->
      The <code>Wrapper</code> interface has been removed.
    </p>
  </dd>
</dl><!-- syscall/js -->

<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
  <dd>
    <p><!-- CL 343883 -->
      The precedence of <code>/</code> in the argument for <code>-run</code> and
      <code>-bench</code> has been increased. <code>A/B|C/D</code> used to be
      treated as <code>A/(B|C)/D</code> and is now treated as
      <code>(A/B)|(C/D)</code>.
    </p>

    <p><!-- CL 356669 -->
      If the <code>-run</code> option does not select any tests, the
      <code>-count</code> option is ignored. This could change the behavior of
      existing tests in the unlikely case that a test changes the set of subtests
      that are run each time the test function itself is run.
    </p>

    <p><!-- CL 251441 -->
      The new <a href="/pkg/testing#F"><code>testing.F</code></a> type
      is used by the new <a href="#fuzzing">fuzzing support described
      above</a>. Tests also now support the command line
      options <code>-test.fuzz</code>, <code>-test.fuzztime</code>, and
      <code>-test.fuzzminimizetime</code>.
    </p>
  </dd>
</dl><!-- testing -->

<dl id="text/template"><dt><a href="/pkg/text/template/">text/template</a></dt>
  <dd>
    <p><!-- CL 321491 -->
      Within a <code>range</code> pipeline the new
      <code>{{break}}</code> command will end the loop early and the
      new <code>{{continue}}</code> command will immediately start the
      next loop iteration.
    </p>

    <p><!-- CL 321490 -->
      The <code>and</code> function no longer always evaluates all arguments; it
      stops evaluating arguments after the first argument that evaluates to
      false.  Similarly, the <code>or</code> function now stops evaluating
      arguments after the first argument that evaluates to true. This makes a
      difference if any of the arguments is a function call.
    </p>
  </dd>
</dl><!-- text/template -->

<dl id="text/template/parse"><dt><a href="/pkg/text/template/parse/">text/template/parse</a></dt>
  <dd>
    <p><!-- CL 321491 -->
      The package supports the new
      <a href="/pkg/text/template/">text/template</a> and
      <a href="/pkg/html/template/">html/template</a>
      <code>{{break}}</code> command via the new constant
      <a href="/pkg/text/template/parse#NodeBreak"><code>NodeBreak</code></a>
      and the new type
      <a href="/pkg/text/template/parse#BreakNode"><code>BreakNode</code></a>,
      and similarly supports the new <code>{{continue}}</code> command
      via the new constant
      <a href="/pkg/text/template/parse#NodeContinue"><code>NodeContinue</code></a>
      and the new type
      <a href="/pkg/text/template/parse#ContinueNode"><code>ContinueNode</code></a>.
    </p>
  </dd>
</dl><!-- text/template -->

<dl id="unicode/utf8"><dt><a href="/pkg/unicode/utf8/">unicode/utf8</a></dt>
  <dd>
    <p><!-- CL 345571 -->
      The new <a href="/pkg/unicode/utf8/#AppendRune"><code>AppendRune</code></a> function appends the UTF-8
      encoding of a <code>rune</code> to a <code>[]byte</code>.
    </p>
  </dd>
</dl><!-- unicode/utf8 -->
