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

<!--
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.14</h2>

<p>
  The latest Go release, version 1.14, arrives six months after <a href="go1.13">Go 1.13</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.html">promise of compatibility</a>.
  We expect almost all Go programs to continue to compile and run as before.
</p>

<p>
  Module support in the <code>go</code> command is now ready for production use,
  and we encourage all users to <a href="https://blog.golang.org/migrating-to-go-modules">migrate to Go
  modules for dependency management</a>. If you are unable to migrate due to a problem in the Go
  toolchain, please ensure that the problem has an
  <a href="https://golang.org/issue?q=is%3Aissue+is%3Aopen+label%3Amodules">open issue</a>
  filed. (If the issue is not on the <code>Go1.15</code> milestone, please let us
  know why it prevents you from migrating so that we can prioritize it
  appropriately.)
</p>

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

<p>
  Per the <a href="https://github.com/golang/proposal/blob/master/design/6977-overlapping-interfaces.md">overlapping interfaces proposal</a>,
  Go 1.14 now permits embedding of interfaces with overlapping method sets:
  methods from an embedded interface may have the same names and identical signatures
  as methods already present in the (embedding) interface. This solves problems that typically
  (but not exclusively) occur with diamond-shaped embedding graphs.
  Explicitly declared methods in an interface must remain
  <a href="https://tip.golang.org/ref/spec#Uniqueness_of_identifiers">unique</a>, as before.
</p>

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

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

<p>
  Go 1.14 is the last release that will run on macOS 10.11 El Capitan.
  Go 1.15 will require macOS 10.12 Sierra or later.
</p>

<p><!-- golang.org/issue/34749 -->
  Go 1.14 is the last Go release to support 32-bit binaries on
  macOS (the <code>darwin/386</code> port). They are no longer
  supported by macOS, starting with macOS 10.15 (Catalina).
  Go continues to support the 64-bit <code>darwin/amd64</code> port.
</p>

<p><!-- golang.org/issue/34751 -->
  Go 1.14 will likely be the last Go release to support 32-bit
  binaries on iOS, iPadOS, watchOS, and tvOS
  (the <code>darwin/arm</code> port). Go continues to support the
  64-bit <code>darwin/arm64</code> port.
</p>

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

<p><!-- CL 203601 -->
  Go binaries on Windows now
  have <a href="https://docs.microsoft.com/en-us/windows/win32/memory/data-execution-prevention">DEP
  (Data Execution Prevention)</a> enabled.
</p>

<p><!-- CL 202439 -->
  On Windows, creating a file
  via <a href="/pkg/os#CreateFile"><code>os.OpenFile</code></a> with
  the <a href="/pkg/os/#O_CREATE"><code>os.O_CREATE</code></a> flag, or
  via <a href="/pkg/syscall#Open"><code>syscall.Open</code></a> with
  the <a href="/pkg/syscall#O_CREAT"><code>syscall.O_CREAT</code></a>
  flag, will now create the file as read-only if the
  bit <code>0o200</code> (owner write permission) is not set in the
  permission argument. This makes the behavior on Windows more like
  that on Unix systems.
</p>

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

<p><!-- CL 203600 -->
  JavaScript values referenced from Go via <code>js.Value</code>
  objects can now be garbage collected.
</p>

<p><!-- CL 203600 -->
  <code>js.Value</code> values can no longer be compared using
  the <code>==</code> operator, and instead must be compared using
  their <code>Equal</code> method.
</p>

<p><!-- CL 203600 -->
  <code>js.Value</code> now
  has <code>IsUndefined</code>, <code>IsNull</code>,
  and <code>IsNaN</code> methods.
</p>

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

<p><!-- Issue 27532 -->
  Go 1.14 contains experimental support for 64-bit RISC-V on Linux
  (<code>GOOS=linux</code>, <code>GOARCH=riscv64</code>). Be aware
  that performance, assembly syntax stability, and possibly
  correctness are a work in progress.
</p>

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

<p><!-- CL 199919 -->
  Go now supports the 64-bit ARM architecture on FreeBSD 12.0 or later (the
  <code>freebsd/arm64</code> port).
</p>

<h3 id="nacl">Native Client (NaCl)</h3>

<p><!-- golang.org/issue/30439 -->
  As <a href="go1.13#ports">announced</a> in the Go 1.13 release notes,
  Go 1.14 drops support for the Native Client platform (<code>GOOS=nacl</code>).
</p>

<h3 id="illumos">Illumos</h3>

<p><!-- CL 203758 -->
  The runtime now respects zone CPU caps
  (the <code>zone.cpu-cap</code> resource control)
  for <code>runtime.NumCPU</code> and the default value
  of <code>GOMAXPROCS</code>.
</p>

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

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

<h4 id="vendor">Vendoring</h4>
<!-- golang.org/issue/33848 -->

<p>
  When the main module contains a top-level <code>vendor</code> directory and
  its <code>go.mod</code> file specifies <code>go</code> <code>1.14</code> or
  higher, the <code>go</code> command now defaults to <code>-mod=vendor</code>
  for operations that accept that flag. A new value for that flag,
  <code>-mod=mod</code>, causes the <code>go</code> command to instead load
  modules from the module cache (as when no <code>vendor</code> directory is
  present).
</p>

<p>
  When <code>-mod=vendor</code> is set (explicitly or by default), the
  <code>go</code> command now verifies that the main module's
  <code>vendor/modules.txt</code> file is consistent with its
  <code>go.mod</code> file.
</p>

<p>
  <code>go</code> <code>list</code> <code>-m</code> no longer silently omits
  transitive dependencies that do not provide packages in
  the <code>vendor</code> directory. It now fails explicitly if
  <code>-mod=vendor</code> is set and information is requested for a module not
  mentioned in <code>vendor/modules.txt</code>.
</p>

<h4 id="go-flags">Flags</h4>

<p><!-- golang.org/issue/32502, golang.org/issue/30345 -->
  The <code>go</code> <code>get</code> command no longer accepts
  the <code>-mod</code> flag. Previously, the flag's setting either
  <a href="https://golang.org/issue/30345">was ignored</a> or
  <a href="https://golang.org/issue/32502">caused the build to fail</a>.
</p>

<p><!-- golang.org/issue/33326 -->
  <code>-mod=readonly</code> is now set by default when the <code>go.mod</code>
  file is read-only and no top-level <code>vendor</code> directory is present.
</p>

<p><!-- golang.org/issue/31481 -->
  <code>-modcacherw</code> is a new flag that instructs the <code>go</code>
  command to leave newly-created directories in the module cache at their
  default permissions rather than making them read-only.
  The use of this flag makes it more likely that tests or other tools will
  accidentally add files not included in the module's verified checksum.
  However, it allows the use of <code>rm</code> <code>-rf</code>
  (instead of <code>go</code> <code>clean</code> <code>-modcache</code>)
  to remove the module cache.
</p>

<p><!-- golang.org/issue/34506 -->
  <code>-modfile=file</code> is a new flag that instructs the <code>go</code>
  command to read (and possibly write) an alternate <code>go.mod</code> file
  instead of the one in the module root directory. A file
  named <code>go.mod</code> must still be present in order to determine the
  module root directory, but it is not accessed. When <code>-modfile</code> is
  specified, an alternate <code>go.sum</code> file is also used: its path is
  derived from the <code>-modfile</code> flag by trimming the <code>.mod</code>
  extension and appending <code>.sum</code>.
</p>

<h4 id="go-env-vars">Environment variables</h4>

<p><!-- golang.org/issue/32966 -->
  <code>GOINSECURE</code> is a new environment variable that instructs
  the <code>go</code> command to not require an HTTPS connection, and to skip
  certificate validation, when fetching certain modules directly from their
  origins. Like the existing <code>GOPRIVATE</code> variable, the value
  of <code>GOINSECURE</code> is a comma-separated list of glob patterns.
</p>

<h4 id="commands-outside-modules">Commands outside modules</h4>

<p><!-- golang.org/issue/32027 -->
  When module-aware mode is enabled explicitly (by setting
  <code>GO111MODULE=on</code>), most module commands have more
  limited functionality if no <code>go.mod</code> file is present. For
  example, <code>go</code> <code>build</code>,
  <code>go</code> <code>run</code>, and other build commands can only build
  packages in the standard library and packages specified as <code>.go</code>
  files on the command line.
</p>

<p>
  Previously, the <code>go</code> command would resolve each package path
  to the latest version of a module but would not record the module path
  or version. This resulted in <a href="https://golang.org/issue/32027">slow,
  non-reproducible builds</a>.
</p>

<p>
  <code>go</code> <code>get</code> continues to work as before, as do
  <code>go</code> <code>mod</code> <code>download</code> and
  <code>go</code> <code>list</code> <code>-m</code> with explicit versions.
</p>

<h4 id="incompatible-versions"><code>+incompatible</code> versions</h4>
<!-- golang.org/issue/34165 -->

<p>
  If the latest version of a module contains a <code>go.mod</code> file,
  <code>go</code> <code>get</code> will no longer upgrade to an
  <a href="/cmd/go/#hdr-Module_compatibility_and_semantic_versioning">incompatible</a>
  major version of that module unless such a version is requested explicitly
  or is already required.
  <code>go</code> <code>list</code> also omits incompatible major versions
  for such a module when fetching directly from version control, but may
  include them if reported by a proxy.
</p>


<h4 id="go.mod"><code>go.mod</code> file maintenance</h4>
<!-- golang.org/issue/34822 -->

<p>
  <code>go</code> commands other than
  <code>go</code> <code>mod</code> <code>tidy</code> no longer
  remove a <code>require</code> directive that specifies a version of an indirect dependency
  that is already implied by other (transitive) dependencies of the main
  module.
</p>

<p>
  <code>go</code> commands other than
  <code>go</code> <code>mod</code> <code>tidy</code> no longer
  edit the <code>go.mod</code> file if the changes are only cosmetic.
</p>

<p>
  When <code>-mod=readonly</code> is set, <code>go</code> commands will no
  longer fail due to a missing <code>go</code> directive or an erroneous
  <code>//&nbsp;indirect</code> comment.
</p>

<h4 id="module-downloading">Module downloading</h4>

<p><!-- golang.org/issue/26092 -->
  The <code>go</code> command now supports Subversion repositories in module mode.
</p>

<p><!-- golang.org/issue/30748 -->
  The <code>go</code> command now includes snippets of plain-text error messages
  from module proxies and other HTTP servers.
  An error message will only be shown if it is valid UTF-8 and consists of only
  graphic characters and spaces.
</p>

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

<p><!-- golang.org/issue/24929 -->
  <code>go test -v</code> now streams <code>t.Log</code> output as it happens,
  rather than at the end of all tests.
</p>

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

<p><!-- CL 190098 -->
  This release improves the performance of most uses
  of <code>defer</code> to incur almost zero overhead compared to
  calling the deferred function directly.
  As a result, <code>defer</code> can now be used in
  performance-critical code without overhead concerns.
</p>

<p><!-- CL 201760, CL 201762 and many others -->
  Goroutines are now asynchronously preemptible.
  As a result, loops without function calls no longer potentially
  deadlock the scheduler or significantly delay garbage collection.
  This is supported on all platforms except <code>windows/arm</code>,
  <code>darwin/arm</code>, <code>js/wasm</code>, and
  <code>plan9/*</code>.
</p>

<p>
  A consequence of the implementation of preemption is that on Unix
  systems, including Linux and macOS systems, programs built with Go
  1.14 will receive more signals than programs built with earlier
  releases.
  This means that programs that use packages
  like <a href="/pkg/syscall/"><code>syscall</code></a>
  or <a href="https://godoc.org/golang.org/x/sys/unix"><code>golang.org/x/sys/unix</code></a>
  will see more slow system calls fail with <code>EINTR</code> errors.
  Those programs will have to handle those errors in some way, most
  likely looping to try the system call again.  For more
  information about this
  see <a href="http://man7.org/linux/man-pages/man7/signal.7.html"><code>man
  7 signal</code></a> for Linux systems or similar documentation for
  other systems.
</p>

<p><!-- CL 201765, CL 195701 and many others -->
  The page allocator is more efficient and incurs significantly less
  lock contention at high values of <code>GOMAXPROCS</code>.
  This is most noticeable as lower latency and higher throughput for
  large allocations being done in parallel and at a high rate.
</p>

<p><!-- CL 171844 and many others -->
  Internal timers, used by
  <a href="/pkg/time/#After"><code>time.After</code></a>,
  <a href="/pkg/time/#Tick"><code>time.Tick</code></a>,
  <a href="/pkg/net/#Conn"><code>net.Conn.SetDeadline</code></a>,
  and friends, are more efficient, with less lock contention and fewer
  context switches.
  This is a performance improvement that should not cause any user
  visible changes.
</p>

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

<p><!-- CL 162237 -->
  This release adds <code>-d=checkptr</code> as a compile-time option
  for adding instrumentation to check that Go code is following
  <code>unsafe.Pointer</code> safety rules dynamically.
  This option is enabled by default (except on Windows) with
  the <code>-race</code> or <code>-msan</code> flags, and can be
  disabled with <code>-gcflags=all=-d=checkptr=0</code>.
  Specifically, <code>-d=checkptr</code> checks the following:
</p>

<ol>
  <li>
    When converting <code>unsafe.Pointer</code> to <code>*T</code>,
    the resulting pointer must be aligned appropriately
    for <code>T</code>.
  </li>
  <li>
    If the result of pointer arithmetic points into a Go heap object,
    one of the <code>unsafe.Pointer</code>-typed operands must point
    into the same object.
  </li>
</ol>

<p>
  Using <code>-d=checkptr</code> is not currently recommended on
  Windows because it causes false alerts in the standard library.
</p>

<p><!-- CL 204338 -->
  The compiler can now emit machine-readable logs of key optimizations
  using the <code>-json</code> flag, including inlining, escape
  analysis, bounds-check elimination, and nil-check elimination.
</p>

<p><!-- CL 196959 -->
  Detailed escape analysis diagnostics (<code>-m=2</code>) now work again.
  This had been dropped from the new escape analysis implementation in
  the previous release.
</p>

<p><!-- CL 196217 -->
  All Go symbols in macOS binaries now begin with an underscore,
  following platform conventions.
</p>

<p><!-- CL 202117 -->
  This release includes experimental support for compiler-inserted
  coverage instrumentation for fuzzing.
  See <a href="https://golang.org/issue/14565">issue 14565</a> for more
  details.
  This API may change in future releases.
</p>

<p><!-- CL 174704 --><!-- CL 196784 -->
  Bounds check elimination now uses information from slice creation and can
  eliminate checks for indexes with types smaller than <code>int</code>.
</p>

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

<h3 id="hash/maphash">New byte sequence hashing package</h3>

<p> <!-- golang.org/issue/28322, CL 186877 -->
  Go 1.14 includes a new package,
  <a href="/pkg/hash/maphash/"><code>hash/maphash</code></a>,
  which provides hash functions on byte sequences.
  These hash functions are intended to be used to implement hash tables or
  other data structures that need to map arbitrary strings or byte
  sequences to a uniform distribution on unsigned 64-bit integers.
</p>
<p>
  The hash functions are collision-resistant but not cryptographically secure.
</p>
<p>
  The hash value of a given byte sequence is consistent within a
  single process, but will be different in different processes.
</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="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
  <dd>
    <p><!-- CL 191976 -->
      Support for SSL version 3.0 (SSLv3) has been removed. Note that SSLv3 is the
      <a href="https://tools.ietf.org/html/rfc7568">cryptographically broken</a>
      protocol predating TLS.
    </p>

    <p><!-- CL 191999 -->
      TLS 1.3 can't be disabled via the <code>GODEBUG</code> environment
      variable anymore. Use the
      <a href="/pkg/crypto/tls/#Config.MaxVersion"><code>Config.MaxVersion</code></a>
      field to configure TLS versions.
    </p>

    <p><!-- CL 205059 -->
      When multiple certificate chains are provided through the
      <a href="/pkg/crypto/tls/#Config.Certificates"><code>Config.Certificates</code></a>
      field, the first one compatible with the peer is now automatically
      selected. This allows for example providing an ECDSA and an RSA
      certificate, and letting the package automatically select the best one.
      Note that the performance of this selection is going to be poor unless the
      <a href="/pkg/crypto/tls/#Certificate.Leaf"><code>Certificate.Leaf</code></a>
      field is set. The
      <a href="/pkg/crypto/tls/#Config.NameToCertificate"><code>Config.NameToCertificate</code></a>
      field, which only supports associating a single certificate with
      a give name, is now deprecated and should be left as <code>nil</code>.
      Similarly the
      <a href="/pkg/crypto/tls/#Config.BuildNameToCertificate"><code>Config.BuildNameToCertificate</code></a>
      method, which builds the <code>NameToCertificate</code> field
      from the leaf certificates, is now deprecated and should not be
      called.
    </p>

    <p><!-- CL 175517 -->
      The new <a href="/pkg/crypto/tls/#CipherSuites"><code>CipherSuites</code></a>
      and <a href="/pkg/crypto/tls/#InsecureCipherSuites"><code>InsecureCipherSuites</code></a>
      functions return a list of currently implemented cipher suites.
      The new <a href="/pkg/crypto/tls/#CipherSuiteName"><code>CipherSuiteName</code></a>
      function returns a name for a cipher suite ID.
    </p>

    <p><!-- CL 205058, 205057 -->
      The new <a href="/pkg/crypto/tls/#ClientHelloInfo.SupportsCertificate">
      <code>(*ClientHelloInfo).SupportsCertificate</code></a> and
      <a href="/pkg/crypto/tls/#CertificateRequestInfo.SupportsCertificate">
      <code>(*CertificateRequestInfo).SupportsCertificate</code></a>
      methods expose whether a peer supports a certain certificate.
    </p>

    <p><!-- CL 174329 -->
      The <code>tls</code> package no longer supports the legacy Next Protocol
      Negotiation (NPN) extension and now only supports ALPN. In previous
      releases it supported both. There are no API changes and applications
      should function identically as before. Most other clients and servers have
      already removed NPN support in favor of the standardized ALPN.
    </p>

    <p><!-- CL 205063, 205062 -->
      RSA-PSS signatures are now used when supported in TLS 1.2 handshakes. This
      won't affect most applications, but custom
      <a href="/pkg/crypto/tls/#Certificate.PrivateKey"><code>Certificate.PrivateKey</code></a>
      implementations that don't support RSA-PSS signatures will need to use the new
      <a href="/pkg/crypto/tls/#Certificate.SupportedSignatureAlgorithms">
      <code>Certificate.SupportedSignatureAlgorithms</code></a>
      field to disable them.
    </p>

    <p><!-- CL 205059, 205059 -->
      <a href="/pkg/crypto/tls/#Config.Certificates"><code>Config.Certificates</code></a> and
      <a href="/pkg/crypto/tls/#Config.GetCertificate"><code>Config.GetCertificate</code></a>
      can now both be nil if
      <a href="/pkg/crypto/tls/#Config.GetConfigForClient"><code>Config.GetConfigForClient</code></a>
      is set. If the callbacks return neither certificates nor an error, the
      <code>unrecognized_name</code> is now sent.
    </p>

    <p><!-- CL 205058 -->
      The new <a href="/pkg/crypto/tls/#CertificateRequestInfo.Version"><code>CertificateRequestInfo.Version</code></a>
      field provides the TLS version to client certificates callbacks.
    </p>

    <p><!-- CL 205068 -->
      The new <code>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</code> and
      <code>TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256</code> constants use
      the final names for the cipher suites previously referred to as
      <code>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305</code> and
      <code>TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305</code>.
    </p>
  </dd>
</dl><!-- crypto/tls -->

<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
  <dd>
    <p><!-- CL 204046 -->
      <a href="/pkg/crypto/x509/#Certificate.CreateCRL"><code>Certificate.CreateCRL</code></a>
      now supports Ed25519 issuers.
    </p>
  </dd>
</dl>

<dl id="debug/dwarf"><dt><a href="/pkg/debug/dwarf/">debug/dwarf</a></dt>
  <dd>
    <p><!-- CL 175138 -->
      The <code>debug/dwarf</code> package now supports reading DWARF
      version 5.
    </p>
    <p>
      The new
      method <a href="/pkg/debug/dwarf/#Data.AddSection"><code>(*Data).AddSection</code></a>
      supports adding arbitrary new DWARF sections from the input file
      to the DWARF <code>Data</code>.
    </p>

    <p><!-- CL 192698 -->
      The new
      method <a href="/pkg/debug/dwarf/#Reader.ByteOrder"><code>(*Reader).ByteOrder</code></a>
      returns the byte order of the current compilation unit.
      This may be used to interpret attributes that are encoded in the
      native ordering, such as location descriptions.
    </p>

    <p><!-- CL 192699 -->
      The new
      method <a href="/pkg/debug/dwarf/#LineReader.Files"><code>(*LineReader).Files</code></a>
      returns the file name table from a line reader.
      This may be used to interpret the value of DWARF attributes such
      as <code>AttrDeclFile</code>.
    </p>
  </dd>
</dl><!-- debug/dwarf -->

<dl id="encoding/asn1"><dt><a href="/pkg/encoding/asn1/">encoding/asn1</a></dt>
  <dd>
    <p><!-- CL 126624 -->
      <a href="/pkg/encoding/asn1/#Unmarshal"><code>Unmarshal</code></a>
      now supports ASN.1 string type BMPString, represented by the new
      <a href="/pkg/encoding/asn1/#TagBMPString"><code>TagBMPString</code></a>
      constant.
    </p>
  </dd>
</dl><!-- encoding/asn1 -->

<dl id="encoding/json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
  <dd>
    <p><!-- CL 200677 -->
      The <a href="/pkg/encoding/json/#Decoder"><code>Decoder</code></a>
      type supports a new
      method <a href="/pkg/encoding/json/#Decoder.InputOffset"><code>InputOffset</code></a>
      that returns the input stream byte offset of the current
      decoder position.
    </p>

    <p><!-- CL 200217 -->
      <a href="/pkg/encoding/json/#Compact"><code>Compact</code></a> no longer
      escapes the <code>U+2028</code> and <code>U+2029</code> characters, which
      was never a documented feature. For proper escaping, see <a
      href="/pkg/encoding/json/#HTMLEscape"><code>HTMLEscape</code></a>.
    </p>

    <p><!-- CL 195045 -->
      <a href="/pkg/encoding/json/#Number"><code>Number</code></a> no longer
      accepts invalid numbers, to follow the documented behavior more closely.
      If a program needs to accept invalid numbers like the empty string,
      consider wrapping the type with <a href="/pkg/encoding/json/#Unmarshaler"><code>Unmarshaler</code></a>.
    </p>
  </dd>
</dl><!-- encoding/json -->

<dl id="go/build"><dt><a href="/pkg/go/build/">go/build</a></dt>
  <dd>
    <p><!-- CL 203820, 211657 -->
      The <a href="/pkg/go/build/#Context"><code>Context</code></a>
      type has a new field <code>Dir</code> which may be used to set
      the working directory for the build.
      The default is the current directory of the running process.
      In module mode, this is used to locate the main module.
    </p>
  </dd>
</dl><!-- go/build -->

<dl id="go/doc"><dt><a href="/pkg/go/doc/">go/doc</a></dt>
  <dd>
    <p><!-- CL 204830 -->
      The new
      function <a href="/pkg/go/doc/#NewFromFiles"><code>NewFromFiles</code></a>
      computes package documentation from a list
      of <code>*ast.File</code>'s and associates examples with the
      appropriate package elements.
      The new information is available in a new <code>Examples</code>
      field
      in the <a href="/pkg/go/doc/#Package"><code>Package</code></a>, <a href="/pkg/go/doc/#Type"><code>Type</code></a>,
      and <a href="/pkg/go/doc/#Func"><code>Func</code></a> types, and a
      new <a href="/pkg/go/doc/#Example.Suffix"><code>Suffix</code></a>
      field in
      the <a href="/pkg/go/doc/#Example"><code>Example</code></a>
      type.
    </p>
  </dd>
</dl><!-- go/doc -->

<dl id="io/ioutil"><dt><a href="/pkg/io/ioutil/">io/ioutil</a></dt>
  <dd>
    <p><!-- CL 198488 -->
      <a href="/pkg/io/ioutil/#TempDir"><code>TempDir</code></a> can now create directories
      whose names have predictable prefixes and suffixes.
      As with <a href="/pkg/io/ioutil/#TempFile"><code>TempFile</code></a>, if the pattern
      contains a '*', the random string replaces the last '*'.
    </p>
  </dd>
</dl>

<dl id="log"><dt><a href="/pkg/log/">log</a></dt>
  <dd>
    <p><!-- CL 186182 -->
      The
      new <a href="https://tip.golang.org/pkg/log/#pkg-constants"><code>Lmsgprefix</code></a>
      flag may be used to tell the logging functions to emit the
      optional output prefix immediately before the log message rather
      than at the start of the line.
    </p>
  </dd>
</dl><!-- log -->

<dl id="math"><dt><a href="/pkg/math/">math</a></dt>
  <dd>
    <p><!-- CL 127458 -->
      The new <a href="/pkg/math/#FMA"><code>FMA</code></a> function
      computes <code>x*y+z</code> in floating point with no
      intermediate rounding of the <code>x*y</code>
      computation. Several architectures implement this computation
      using dedicated hardware instructions for additional performance.
    </p>
  </dd>
</dl><!-- math -->

<dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt>
  <dd>
    <p><!-- CL 164972 -->
      The <a href="/pkg/math/big/#Int.GCD"><code>GCD</code></a> method
      now allows the inputs <code>a</code> and <code>b</code> to be
      zero or negative.
    </p>
  </dd>
</dl><!-- math/big -->

<dl id="math/bits"><dt><a href="/pkg/math/bits/">math/bits</a></dt>
  <dd>
    <p><!-- CL 197838 -->
      The new functions
      <a href="/pkg/math/bits/#Rem"><code>Rem</code></a>,
      <a href="/pkg/math/bits/#Rem32"><code>Rem32</code></a>, and
      <a href="/pkg/math/bits/#Rem64"><code>Rem64</code></a>
      support computing a remainder even when the quotient overflows.
    </p>
  </dd>
</dl><!-- math/bits -->

<dl id="mime"><dt><a href="/pkg/mime/">mime</a></dt>
  <dd>
    <p><!-- CL 186927 -->
      The default type of <code>.js</code> and <code>.mjs</code> files
      is now <code>text/javascript</code> rather
      than <code>application/javascript</code>.
      This is in accordance
      with <a href="https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/">an
      IETF draft</a> that treats <code>application/javascript</code> as obsolete.
    </p>
  </dd>
</dl><!-- mime -->

<dl id="mime/multipart"><dt><a href="/pkg/mime/multipart/">mime/multipart</a></dt>
  <dd>
    <p>
      The
      new <a href="/pkg/mime/multipart/#Reader"><code>Reader</code></a>
      method <a href="/pkg/mime/multipart/#Reader.NextRawPart"><code>NextRawPart</code></a>
      supports fetching the next MIME part without transparently
      decoding <code>quoted-printable</code> data.
    </p>
  </dd>
</dl><!-- mime/multipart -->

<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
  <dd>
    <p><!-- CL 200760 -->
      The new <a href="/pkg/net/http/#Header"><code>Header</code></a>
      method <a href="/pkg/net/http/#Header.Values"><code>Values</code></a>
      can be used to fetch all values associated with a
      canonicalized key.
    </p>

    <p><!-- CL 61291 -->
      The
      new <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
      field <a href="/pkg/net/http/#Transport.DialTLSContext"><code>DialTLSContext</code></a>
      can be used to specify an optional dial function for creating
      TLS connections for non-proxied HTTPS requests.
      This new field can be used instead
      of <a href="/pkg/net/http/#Transport.DialTLS"><code>DialTLS</code></a>,
      which is now considered deprecated; <code>DialTLS</code> will
      continue to work, but new code should
      use <code>DialTLSContext</code>, which allows the transport to
      cancel dials as soon as they are no longer needed.
    </p>

    <p><!-- CL 192518, CL 194218 -->
      On Windows, <a href="/pkg/net/http/#ServeFile"><code>ServeFile</code></a> now correctly
      serves files larger than 2GB.
    </p>
  </dd>
</dl><!-- net/http -->

<dl id="net/http/httptest"><dt><a href="/pkg/net/http/httptest/">net/http/httptest</a></dt>
  <dd>
    <p><!-- CL 201557 -->
      The
      new <a href="/pkg/net/http/httptest/#Server"><code>Server</code></a>
      field <a href="/pkg/net/http/httptest/#Server.EnableHTTP2"><code>EnableHTTP2</code></a>
      supports enabling HTTP/2 on the test server.
    </p>
  </dd>
</dl><!-- net/http/httptest -->

<dl id="net/textproto"><dt><a href="/pkg/net/textproto/">net/textproto</a></dt>
  <dd>
    <p><!-- CL 200760 -->
      The
      new <a href="/pkg/net/textproto/#MIMEHeader"><code>MIMEHeader</code></a>
      method <a href="/pkg/net/textproto/#MIMEHeader.Values"><code>Values</code></a>
      can be used to fetch all values associated with a canonicalized
      key.
    </p>
  </dd>
</dl><!-- net/textproto -->

<dl id="net/url"><dt><a href="/pkg/net/url/">net/url</a></dt>
  <dd>
    <p><!-- CL 185117 -->
      When parsing of a URL fails
      (for example by <a href="/pkg/net/url/#Parse"><code>Parse</code></a>
      or <a href="/pkg/net/url/#ParseRequestURI"><code>ParseRequestURI</code></a>),
      the resulting <a href="/pkg/net/url/#Error.Error"><code>Error</code></a> message
      will now quote the unparsable URL.
      This provides clearer structure and consistency with other parsing errors.
    </p>
  </dd>
</dl><!-- net/url -->

<dl id="os/signal"><dt><a href="/pkg/os/signal/">os/signal</a></dt>
  <dd>
    <p><!-- CL 187739 -->
      On Windows,
      the <code>CTRL_CLOSE_EVENT</code>, <code>CTRL_LOGOFF_EVENT</code>,
      and <code>CTRL_SHUTDOWN_EVENT</code> events now generate
      a <code>syscall.SIGTERM</code> signal, similar to how Control-C
      and Control-Break generate a <code>syscall.SIGINT</code> signal.
    </p>
  </dd>
</dl><!-- os/signal -->

<dl id="plugin"><dt><a href="/pkg/plugin/">plugin</a></dt>
  <dd>
    <p><!-- CL 191617 -->
      The <code>plugin</code> package now supports <code>freebsd/amd64</code>.
    </p>
  </dd>
</dl><!-- plugin -->

<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  <dd>
    <p><!-- CL 85661 -->
      <a href="/pkg/reflect#StructOf"><code>StructOf</code></a> now
      supports creating struct types with unexported fields, by
      setting the <code>PkgPath</code> field in
      a <code>StructField</code> element.
    </p>
  </dd>
</dl><!-- reflect -->

<dl id="pkg-runtime"><dt><a href="/pkg/runtime/">runtime</a></dt>
  <dd>
    <p><!-- CL 200081 -->
      <code>runtime.Goexit</code> can no longer be aborted by a
      recursive <code>panic</code>/<code>recover</code>.
    </p>

    <p><!-- CL 188297, CL 191785 -->
      On macOS, <code>SIGPIPE</code> is no longer forwarded to signal
      handlers installed before the Go runtime is initialized.
      This is necessary because macOS delivers <code>SIGPIPE</code>
      <a href="https://golang.org/issue/33384">to the main thread</a>
      rather than the thread writing to the closed pipe.
    </p>
  </dd>
</dl><!-- runtime -->

<dl id="runtime/pprof"><dt><a href="/pkg/runtime/pprof/">runtime/pprof</a></dt>
  <dd>
    <p><!-- CL 204636, 205097 -->
    The generated profile no longer includes the pseudo-PCs used for inline
    marks. Symbol information of inlined functions is encoded in
    <a href="https://github.com/google/pprof/blob/5e96527/proto/profile.proto#L177-L184">the format</a>
    the pprof tool expects. This is a fix for the regression introduced
    during recent releases.
    </p>
  </dd>
</dl><!-- runtime/pprof -->

<dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
  <dd>
    <p>
      The <a href="/pkg/strconv/#NumError"><code>NumError</code></a>
      type now has
      an <a href="/pkg/strconv/#NumError.Unwrap"><code>Unwrap</code></a>
      method that may be used to retrieve the reason that a conversion
      failed.
      This supports using <code>NumError</code> values
      with <a href="/pkg/errors/#Is"><code>errors.Is</code></a> to see
      if the underlying error
      is <a href="/pkg/strconv/#pkg-variables"><code>strconv.ErrRange</code></a>
      or <a href="/pkg/strconv/#pkg-variables"><code>strconv.ErrSyntax</code></a>.
    </p>
  </dd>
</dl><!-- strconv -->

<dl id="sync"><dt><a href="/pkg/sync/">sync</a></dt>
  <dd>
    <p><!-- CL 200577 -->
      Unlocking a highly contended <code>Mutex</code> now directly
      yields the CPU to the next goroutine waiting for
      that <code>Mutex</code>. This significantly improves the
      performance of highly contended mutexes on high CPU count
      machines.
    </p>
  </dd>
</dl><!-- sync -->

<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
  <dd>
    <p><!-- CL 201359 -->
       The testing package now supports cleanup functions, called after
       a test or benchmark has finished, by calling
       <a href="/pkg/testing#T.Cleanup"><code>T.Cleanup</code></a> or
       <a href="/pkg/testing#B.Cleanup"><code>B.Cleanup</code></a> respectively.
    </p>
  </dd>
</dl><!-- testing -->

<dl id="text/template"><dt><a href="/pkg/text/template/">text/template</a></dt>
  <dd>
    <p><!-- CL 206124 -->
      The text/template package now correctly reports errors when a
      parenthesized argument is used as a function.
      This most commonly shows up in erroneous cases like
      <code>{{if (eq .F "a") or (eq .F "b")}}</code>.
      This should be written as <code>{{if or (eq .F "a") (eq .F "b")}}</code>.
      The erroneous case never worked as expected, and will now be
      reported with an error <code>can't give argument to non-function</code>.
    </p>
  </dd>
</dl><!-- text/template -->

<dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
  <dd>
    <p>
      The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated
      support throughout the system has been upgraded from Unicode 11.0 to
      <a href="https://www.unicode.org/versions/Unicode12.0.0/">Unicode 12.0</a>,
      which adds 554 new characters, including four new scripts, and 61 new emoji.
    </p>
  </dd>
</dl><!-- unicode -->
