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

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

<p>
  The latest Go release, version 1.15, arrives six months after <a href="go1.14">Go 1.14</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>
  Go 1.15 includes <a href="#linker">substantial improvements to the linker</a>,
  improves <a href="#runtime">allocation for small objects at high core counts</a>, and
  deprecates <a href="#commonname">X.509 CommonName</a>.
  <code>GOPROXY</code> now supports skipping proxies that return errors and
  a new <a href="#time/tzdata">embedded tzdata package</a> has been added.
</p>

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

<p>
  There are no changes to the language.
</p>

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

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

<p>
  As <a href="go1.14#darwin">announced</a> in the Go 1.14 release
  notes, Go 1.15 requires macOS 10.12 Sierra or later; support for
  previous versions has been discontinued.
</p>

<p> <!-- golang.org/issue/37610, golang.org/issue/37611, CL 227582, and CL 227198  -->
  As <a href="/doc/go1.14#darwin">announced</a> in the Go 1.14 release
  notes, Go 1.15 drops support for 32-bit binaries on macOS, iOS,
  iPadOS, watchOS, and tvOS (the <code>darwin/386</code>
  and <code>darwin/arm</code> ports). Go continues to support the
  64-bit <code>darwin/amd64</code> and <code>darwin/arm64</code> ports.
</p>

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

<p> <!-- CL 214397 and CL 230217 -->
  Go now generates Windows ASLR executables when <code>-buildmode=pie</code>
  cmd/link flag is provided. Go command uses <code>-buildmode=pie</code>
  by default on Windows.
</p>

<p><!-- CL 227003 -->
  The <code>-race</code> and <code>-msan</code> flags now always
  enable <code>-d=checkptr</code>, which checks uses
  of <code>unsafe.Pointer</code>. This was previously the case on all
  OSes except Windows.
</p>

<p><!-- CL 211139 -->
  Go-built DLLs no longer cause the process to exit when it receives a
  signal (such as Ctrl-C at a terminal).
</p>

<h3 id="android">Android</h3>

<p> <!-- CL 235017, golang.org/issue/38838 -->
  When linking binaries for Android, Go 1.15 explicitly selects
  the <code>lld</code> linker available in recent versions of the NDK.
  The <code>lld</code> linker avoids crashes on some devices, and is
  planned to become the default NDK linker in a future NDK version.
</p>

<h3 id="openbsd">OpenBSD</h3>

<p><!-- CL 234381 -->
  Go 1.15 adds support for OpenBSD 6.7 on <code>GOARCH=arm</code>
  and <code>GOARCH=arm64</code>. Previous versions of Go already
  supported OpenBSD 6.7 on <code>GOARCH=386</code>
  and <code>GOARCH=amd64</code>.
</p>

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

<p> <!-- CL 226400, CL 226206, and others -->
  There has been progress in improving the stability and performance
  of the 64-bit RISC-V port on Linux (<code>GOOS=linux</code>,
  <code>GOARCH=riscv64</code>). It also now supports asynchronous
  preemption.
</p>

<h3 id="386">386</h3>

<p><!-- golang.org/issue/40255 -->
  Go 1.15 is the last release to support x87-only floating-point
  hardware (<code>GO386=387</code>). Future releases will require at
  least SSE2 support on 386, raising Go's
  minimum <code>GOARCH=386</code> requirement to the Intel Pentium 4
  (released in 2000) or AMD Opteron/Athlon 64 (released in 2003).
</p>

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

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

<p><!-- golang.org/issue/37367 -->
  The <code>GOPROXY</code> environment variable now supports skipping proxies
  that return errors. Proxy URLs may now be separated with either commas
  (<code>,</code>) or pipe characters (<code>|</code>). If a proxy URL is
  followed by a comma, the <code>go</code> command will only try the next proxy
  in the list after a 404 or 410 HTTP response. If a proxy URL is followed by a
  pipe character, the <code>go</code> command will try the next proxy in the
  list after any error. Note that the default value of <code>GOPROXY</code>
  remains <code>https://proxy.golang.org,direct</code>, which does not fall
  back to <code>direct</code> in case of errors.
</p>

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

<p><!-- https://golang.org/issue/36134 -->
  Changing the <code>-timeout</code> flag now invalidates cached test results. A
  cached result for a test run with a long timeout will no longer count as
  passing when <code>go</code> <code>test</code> is re-invoked with a short one.
</p>

<h4 id="go-flag-parsing">Flag parsing</h4>

<p><!-- https://golang.org/cl/211358 -->
  Various flag parsing issues in <code>go</code> <code>test</code> and
  <code>go</code> <code>vet</code> have been fixed. Notably, flags specified
  in <code>GOFLAGS</code> are handled more consistently, and
  the <code>-outputdir</code> flag now interprets relative paths relative to the
  working directory of the <code>go</code> command (rather than the working
  directory of each individual test).
</p>

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

<p><!-- https://golang.org/cl/219538 -->
  The location of the module cache may now be set with
  the <code>GOMODCACHE</code> environment variable. The default value of
  <code>GOMODCACHE</code> is <code>GOPATH[0]/pkg/mod</code>, the location of the
  module cache before this change.
</p>

<p><!-- https://golang.org/cl/221157 -->
  A workaround is now available for Windows "Access is denied" errors in
  <code>go</code> commands that access the module cache, caused by external
  programs concurrently scanning the file system (see
  <a href="https://golang.org/issue/36568">issue #36568</a>). The workaround is
  not enabled by default because it is not safe to use when Go versions lower
  than 1.14.2 and 1.13.10 are running concurrently with the same module cache.
  It can be enabled by explicitly setting the environment variable
  <code>GODEBUG=modcacheunzipinplace=1</code>.
</p>

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

<h4 id="vet-string-int">New warning for string(x)</h4>

<p><!-- CL 212919, 232660 -->
  The vet tool now warns about conversions of the
  form <code>string(x)</code> where <code>x</code> has an integer type
  other than <code>rune</code> or <code>byte</code>.
  Experience with Go has shown that many conversions of this form
  erroneously assume that <code>string(x)</code> evaluates to the
  string representation of the integer <code>x</code>.
  It actually evaluates to a string containing the UTF-8 encoding of
  the value of <code>x</code>.
  For example, <code>string(9786)</code> does not evaluate to the
  string <code>"9786"</code>; it evaluates to the
  string <code>"\xe2\x98\xba"</code>, or <code>"☺"</code>.
</p>

<p>
  Code that is using <code>string(x)</code> correctly can be rewritten
  to <code>string(rune(x))</code>.
  Or, in some cases, calling <code>utf8.EncodeRune(buf, x)</code> with
  a suitable byte slice <code>buf</code> may be the right solution.
  Other code should most likely use <code>strconv.Itoa</code>
  or <code>fmt.Sprint</code>.
</p>

<p>
  This new vet check is enabled by default when
  using <code>go</code> <code>test</code>.
</p>

<p>
  We are considering prohibiting the conversion in a future release of Go.
  That is, the language would change to only
  permit <code>string(x)</code> for integer <code>x</code> when the
  type of <code>x</code> is <code>rune</code> or <code>byte</code>.
  Such a language change would not be backward compatible.
  We are using this vet check as a first trial step toward changing
  the language.
</p>

<h4 id="vet-impossible-interface">New warning for impossible interface conversions</h4>

<p><!-- CL 218779, 232660 -->
  The vet tool now warns about type assertions from one interface type
  to another interface type when the type assertion will always fail.
  This will happen if both interface types implement a method with the
  same name but with a different type signature.
</p>

<p>
  There is no reason to write a type assertion that always fails, so
  any code that triggers this vet check should be rewritten.
</p>

<p>
  This new vet check is enabled by default when
  using <code>go</code> <code>test</code>.
</p>

<p>
  We are considering prohibiting impossible interface type assertions
  in a future release of Go.
  Such a language change would not be backward compatible.
  We are using this vet check as a first trial step toward changing
  the language.
</p>

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

<p><!-- CL 221779 -->
  If <code>panic</code> is invoked with a value whose type is derived from any
  of: <code>bool</code>, <code>complex64</code>, <code>complex128</code>, <code>float32</code>, <code>float64</code>,
  <code>int</code>, <code>int8</code>, <code>int16</code>, <code>int32</code>, <code>int64</code>, <code>string</code>,
  <code>uint</code>, <code>uint8</code>, <code>uint16</code>, <code>uint32</code>, <code>uint64</code>, <code>uintptr</code>,
  then the value will be printed, instead of just its address.
  Previously, this was only true for values of exactly these types.
</p>

<p><!-- CL 228900 -->
  On a Unix system, if the <code>kill</code> command
  or <code>kill</code> system call is used to send
  a <code>SIGSEGV</code>, <code>SIGBUS</code>,
  or <code>SIGFPE</code> signal to a Go program, and if the signal
  is not being handled via
  <a href="/pkg/os/signal/#Notify"><code>os/signal.Notify</code></a>,
  the Go program will now reliably crash with a stack trace.
  In earlier releases the behavior was unpredictable.
</p>

<p><!-- CL 221182, CL 229998 -->
  Allocation of small objects now performs much better at high core
  counts, and has lower worst-case latency.
</p>

<p><!-- CL 216401 -->
  Converting a small integer value into an interface value no longer
  causes allocation.
</p>

<p><!-- CL 216818 -->
  Non-blocking receives on closed channels now perform as well as
  non-blocking receives on open channels.
</p>

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

<p><!-- CL 229578 -->
  Package <code>unsafe</code>'s <a href="/pkg/unsafe/#Pointer">safety
  rules</a> allow converting an <code>unsafe.Pointer</code>
  into <code>uintptr</code> when calling certain
  functions. Previously, in some cases, the compiler allowed multiple
  chained conversions (for example, <code>syscall.Syscall(…,</code>
  <code>uintptr(uintptr(ptr)),</code> <code>…)</code>). The compiler
  now requires exactly one conversion. Code that used multiple
  conversions should be updated to satisfy the safety rules.
</p>

<p><!-- CL 230544, CL 231397 -->
  Go 1.15 reduces typical binary sizes by around 5% compared to Go
  1.14 by eliminating certain types of GC metadata and more
  aggressively eliminating unused type metadata.
</p>

<p><!-- CL 219357, CL 231600 -->
  The toolchain now mitigates
  <a href="https://www.intel.com/content/www/us/en/support/articles/000055650/processors.html">Intel
  CPU erratum SKX102</a> on <code>GOARCH=amd64</code> by aligning
  functions to 32 byte boundaries and padding jump instructions. While
  this padding increases binary sizes, this is more than made up for
  by the binary size improvements mentioned above.
</p>

<p><!-- CL 222661 -->
  Go 1.15 adds a <code>-spectre</code> flag to both the
  compiler and the assembler, to allow enabling Spectre mitigations.
  These should almost never be needed and are provided mainly as a
  “defense in depth” mechanism.
  See the <a href="https://github.com/golang/go/wiki/Spectre">Spectre wiki page</a> for details.
</p>

<p><!-- CL 228578 -->
  The compiler now rejects <code>//go:</code> compiler directives that
  have no meaning for the declaration they are applied to with a
  "misplaced compiler directive" error. Such misapplied directives
  were broken before, but were silently ignored by the compiler.
</p>

<p><!-- CL 206658, CL 205066 -->
  The compiler's <code>-json</code> optimization logging now reports
  large (>= 128 byte) copies and includes explanations of escape
  analysis decisions.
</p>

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

<p>
  This release includes substantial improvements to the Go linker,
  which reduce linker resource usage (both time and memory) and
  improve code robustness/maintainability.
</p>

<p>
  For a representative set of large Go programs, linking is 20% faster
  and requires 30% less memory on average, for <code>ELF</code>-based
  OSes (Linux, FreeBSD, NetBSD, OpenBSD, Dragonfly, and Solaris)
  running on <code>amd64</code> architectures, with more modest
  improvements for other architecture/OS combinations.
</p>

<p>
  The key contributors to better linker performance are a newly
  redesigned object file format, and a revamping of internal
  phases to increase concurrency (for example, applying relocations to
  symbols in parallel). Object files in Go 1.15 are slightly larger
  than their 1.14 equivalents.
</p>

<p>
  These changes are part of a multi-release project
  to <a href="https://golang.org/s/better-linker">modernize the Go
  linker</a>, meaning that there will be additional linker
  improvements expected in future releases.
</p>

<p><!-- CL 207877 -->
  The linker now defaults to internal linking mode
  for <code>-buildmode=pie</code> on
  <code>linux/amd64</code> and <code>linux/arm64</code>, so these
  configurations no longer require a C linker. External linking
  mode (which was the default in Go 1.14 for
  <code>-buildmode=pie</code>) can still be requested with
  <code>-ldflags=-linkmode=external</code> flag.
</p>

<h2 id="objdump">Objdump</h2>

<p><!-- CL 225459 -->
  The <a href="/cmd/objdump/">objdump</a> tool now supports
  disassembling in GNU assembler syntax with the <code>-gnu</code>
  flag.
</p>

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

<h3 id="time/tzdata">New embedded tzdata package</h3>

<p> <!-- CL 224588 -->
  Go 1.15 includes a new package,
  <a href="/pkg/time/tzdata/"><code>time/tzdata</code></a>,
  that permits embedding the timezone database into a program.
  Importing this package (as <code>import _ "time/tzdata"</code>)
  permits the program to find timezone information even if the
  timezone database is not available on the local system.
  You can also embed the timezone database by building
  with <code>-tags timetzdata</code>.
  Either approach increases the size of the program by about 800 KB.
</p>

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

<p><!-- CL 235817 -->
  Go 1.15 will translate the C type <code>EGLConfig</code> to the
  Go type <code>uintptr</code>. This change is similar to how Go
  1.12 and newer treats <code>EGLDisplay</code>, Darwin's CoreFoundation and
  Java's JNI types. See the <a href="/cmd/cgo/#hdr-Special_cases">cgo
  documentation</a> for more information.
</p>

<p><!-- CL 250940 -->
  In Go 1.15.3 and later, cgo will not permit Go code to allocate an
  undefined struct type (a C struct defined as just <code>struct
  S;</code> or similar) on the stack or heap.
  Go code will only be permitted to use pointers to those types.
  Allocating an instance of such a struct and passing a pointer, or a
  full struct value, to C code was always unsafe and unlikely to work
  correctly; it is now forbidden.
  The fix is to either rewrite the Go code to use only pointers, or to
  ensure that the Go code sees the full definition of the struct by
  including the appropriate C header file.
</p>

<h3 id="commonname">X.509 CommonName deprecation</h3>

<p><!-- CL 231379 -->
  The deprecated, legacy behavior of treating the <code>CommonName</code>
  field on X.509 certificates as a host name when no Subject Alternative Names
  are present is now disabled by default. It can be temporarily re-enabled by
  adding the value <code>x509ignoreCN=0</code> to the <code>GODEBUG</code>
  environment variable.
</p>

<p>
  Note that if the <code>CommonName</code> is an invalid host name, it's always
  ignored, regardless of <code>GODEBUG</code> settings. Invalid names include
  those with any characters other than letters, digits, hyphens and underscores,
  and those with empty labels or trailing dots.
</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 225357, CL 225557 -->
      When a <a href="/pkg/bufio/#Scanner"><code>Scanner</code></a> is
      used with an invalid
      <a href="/pkg/io/#Reader"><code>io.Reader</code></a> that
      incorrectly returns a negative number from <code>Read</code>,
      the <code>Scanner</code> will no longer panic, but will instead
      return the new error
      <a href="/pkg/bufio/#ErrBadReadCount"><code>ErrBadReadCount</code></a>.
    </p>
  </dd>
</dl><!-- bufio -->

<dl id="context"><dt><a href="/pkg/context/">context</a></dt>
  <dd>
    <p><!-- CL 223777 -->
      Creating a derived <code>Context</code> using a nil parent is now explicitly
      disallowed. Any attempt to do so with the
      <a href="/pkg/context/#WithValue"><code>WithValue</code></a>,
      <a href="/pkg/context/#WithDeadline"><code>WithDeadline</code></a>, or
      <a href="/pkg/context/#WithCancel"><code>WithCancel</code></a> functions
      will cause a panic.
    </p>
  </dd>
</dl><!-- context -->

<dl id="crypto"><dt><a href="/pkg/crypto/">crypto</a></dt>
  <dd>
    <p><!-- CL 231417, CL 225460 -->
      The <code>PrivateKey</code> and <code>PublicKey</code> types in the
      <a href="/pkg/crypto/rsa/"><code>crypto/rsa</code></a>,
      <a href="/pkg/crypto/ecdsa/"><code>crypto/ecdsa</code></a>, and
      <a href="/pkg/crypto/ed25519/"><code>crypto/ed25519</code></a> packages
      now have an <code>Equal</code> method to compare keys for equivalence
      or to make type-safe interfaces for public keys. The method signature
      is compatible with
      <a href="https://pkg.go.dev/github.com/google/go-cmp/cmp#Equal"><code>go-cmp</code>'s
      definition of equality</a>.
    </p>

    <p><!-- CL 224937 -->
      <a href="/pkg/crypto/#Hash"><code>Hash</code></a> now implements
      <a href="/pkg/fmt/#Stringer"><code>fmt.Stringer</code></a>.
    </p>
  </dd>
</dl><!-- crypto -->

<dl id="crypto/ecdsa"><dt><a href="/pkg/crypto/ecdsa/">crypto/ecdsa</a></dt>
  <dd>
    <p><!-- CL 217940 -->
      The new <a href="/pkg/crypto/ecdsa/#SignASN1"><code>SignASN1</code></a>
      and <a href="/pkg/crypto/ecdsa/#VerifyASN1"><code>VerifyASN1</code></a>
      functions allow generating and verifying ECDSA signatures in the standard
      ASN.1 DER encoding.
    </p>
  </dd>
</dl><!-- crypto/ecdsa -->

<dl id="crypto/elliptic"><dt><a href="/pkg/crypto/elliptic/">crypto/elliptic</a></dt>
  <dd>
    <p><!-- CL 202819 -->
      The new <a href="/pkg/crypto/elliptic/#MarshalCompressed"><code>MarshalCompressed</code></a>
      and <a href="/pkg/crypto/elliptic/#UnmarshalCompressed"><code>UnmarshalCompressed</code></a>
      functions allow encoding and decoding NIST elliptic curve points in compressed format.
    </p>
  </dd>
</dl><!-- crypto/elliptic -->

<dl id="crypto/rsa"><dt><a href="/pkg/crypto/rsa/">crypto/rsa</a></dt>
  <dd>
    <p><!-- CL 226203 -->
      <a href="/pkg/crypto/rsa/#VerifyPKCS1v15"><code>VerifyPKCS1v15</code></a>
      now rejects invalid short signatures with missing leading zeroes, according to RFC 8017.
    </p>
  </dd>
</dl><!-- crypto/rsa -->

<dl id="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
  <dd>
    <p><!-- CL 214977 -->
      The new
      <a href="/pkg/crypto/tls/#Dialer"><code>Dialer</code></a>
      type and its
      <a href="/pkg/crypto/tls/#Dialer.DialContext"><code>DialContext</code></a>
      method permit using a context to both connect and handshake with a TLS server.
    </p>

    <p><!-- CL 229122 -->
      The new
      <a href="/pkg/crypto/tls/#Config.VerifyConnection"><code>VerifyConnection</code></a>
      callback on the <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> type
      allows custom verification logic for every connection. It has access to the
      <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a>
      which includes peer certificates, SCTs, and stapled OCSP responses.
    </p>

    <p><!-- CL 230679 -->
      Auto-generated session ticket keys are now automatically rotated every 24 hours,
      with a lifetime of 7 days, to limit their impact on forward secrecy.
    </p>

    <p><!-- CL 231317 -->
      Session ticket lifetimes in TLS 1.2 and earlier, where the session keys
      are reused for resumed connections, are now limited to 7 days, also to
      limit their impact on forward secrecy.
    </p>

    <p><!-- CL 231038 -->
      The client-side downgrade protection checks specified in RFC 8446 are now
      enforced. This has the potential to cause connection errors for clients
      encountering middleboxes that behave like unauthorized downgrade attacks.
    </p>

    <p><!-- CL 208226 -->
      <a href="/pkg/crypto/tls/#SignatureScheme"><code>SignatureScheme</code></a>,
      <a href="/pkg/crypto/tls/#CurveID"><code>CurveID</code></a>, and
      <a href="/pkg/crypto/tls/#ClientAuthType"><code>ClientAuthType</code></a>
      now implement <a href="/pkg/fmt/#Stringer"><code>fmt.Stringer</code></a>.
    </p>

    <p><!-- CL 236737 -->
      The <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a>
      fields <code>OCSPResponse</code> and <code>SignedCertificateTimestamps</code>
      are now repopulated on client-side resumed connections.
    </p>

    <p><!-- CL 227840 -->
      <a href="/pkg/crypto/tls/#Conn"><code>tls.Conn</code></a>
      now returns an opaque error on permanently broken connections, wrapping
      the temporary
      <a href="/pkg/net/http/#Error"><code>net.Error</code></a>. To access the
      original <code>net.Error</code>, use
      <a href="/pkg/errors/#As"><code>errors.As</code></a> (or
      <a href="/pkg/errors/#Unwrap"><code>errors.Unwrap</code></a>) instead of a
      type assertion.
    </p>
  </dd>
</dl><!-- crypto/tls -->

<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
  <dd>
    <p><!-- CL 231378, CL 231380, CL 231381 -->
      If either the name on the certificate or the name being verified (with
      <a href="/pkg/crypto/x509/#VerifyOptions.DNSName"><code>VerifyOptions.DNSName</code></a>
      or <a href="/pkg/crypto/x509/#Certificate.VerifyHostname"><code>VerifyHostname</code></a>)
      are invalid, they will now be compared case-insensitively without further
      processing (without honoring wildcards or stripping trailing dots).
      Invalid names include those with any characters other than letters,
      digits, hyphens and underscores, those with empty labels, and names on
      certificates with trailing dots.
    </p>

    <p><!-- CL 217298 -->
      The new <a href="/pkg/crypto/x509/#CreateRevocationList"><code>CreateRevocationList</code></a>
      function and <a href="/pkg/crypto/x509/#RevocationList"><code>RevocationList</code></a> type
      allow creating RFC 5280-compliant X.509 v2 Certificate Revocation Lists.
    </p>

    <p><!-- CL 227098 -->
      <a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
      now automatically generates the <code>SubjectKeyId</code> if the template
      is a CA and doesn't explicitly specify one.
    </p>

    <p><!-- CL 228777 -->
      <a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
      now returns an error if the template specifies <code>MaxPathLen</code> but is not a CA.
    </p>

    <p><!-- CL 205237 -->
      On Unix systems other than macOS, the <code>SSL_CERT_DIR</code>
      environment variable can now be a colon-separated list.
    </p>

    <p><!-- CL 227037 -->
      On macOS, binaries are now always linked against
      <code>Security.framework</code> to extract the system trust roots,
      regardless of whether cgo is available. The resulting behavior should be
      more consistent with the OS verifier.
    </p>
  </dd>
</dl><!-- crypto/x509 -->

<dl id="crypto/x509/pkix"><dt><a href="/pkg/crypto/x509/pkix/">crypto/x509/pkix</a></dt>
  <dd>
    <p><!-- CL 229864, CL 240543 -->
      <a href="/pkg/crypto/x509/pkix/#Name.String"><code>Name.String</code></a>
      now prints non-standard attributes from
      <a href="/pkg/crypto/x509/pkix/#Name.Names"><code>Names</code></a> if
      <a href="/pkg/crypto/x509/pkix/#Name.ExtraNames"><code>ExtraNames</code></a> is nil.
    </p>
  </dd>
</dl><!-- crypto/x509/pkix -->

<dl id="database/sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt>
  <dd>
    <p><!-- CL 145758 -->
      The new <a href="/pkg/database/sql/#DB.SetConnMaxIdleTime"><code>DB.SetConnMaxIdleTime</code></a>
      method allows removing a connection from the connection pool after
      it has been idle for a period of time, without regard to the total
      lifespan of the connection.  The <a href="/pkg/database/sql/#DBStats.MaxIdleTimeClosed"><code>DBStats.MaxIdleTimeClosed</code></a>
      field shows the total number of connections closed due to
      <code>DB.SetConnMaxIdleTime</code>.
    </p>

    <p><!-- CL 214317 -->
      The new <a href="/pkg/database/sql/#Row.Err"><code>Row.Err</code></a> getter
      allows checking for query errors without calling
      <code>Row.Scan</code>.
    </p>
  </dd>
</dl><!-- database/sql -->

<dl id="database/sql/driver"><dt><a href="/pkg/database/sql/driver/">database/sql/driver</a></dt>
  <dd>
    <p><!-- CL 174122 -->
      The new <a href="/pkg/database/sql/driver/#Validator"><code>Validator</code></a>
      interface may be implemented by <code>Conn</code> to allow drivers
      to signal if a connection is valid or if it should be discarded.
    </p>
  </dd>
</dl><!-- database/sql/driver -->

<dl id="debug/pe"><dt><a href="/pkg/debug/pe/">debug/pe</a></dt>
  <dd>
    <p><!-- CL 222637 -->
      The package now defines the
      <code>IMAGE_FILE</code>, <code>IMAGE_SUBSYSTEM</code>,
      and <code>IMAGE_DLLCHARACTERISTICS</code> constants used by the
      PE file format.
    </p>
  </dd>
</dl><!-- debug/pe -->

<dl id="encoding/asn1"><dt><a href="/pkg/encoding/asn1/">encoding/asn1</a></dt>
  <dd>
    <p><!-- CL 226984 -->
      <a href="/pkg/encoding/asn1/#Marshal"><code>Marshal</code></a> now sorts the components
      of SET OF according to X.690 DER.
    </p>

    <p><!-- CL 227320 -->
      <a href="/pkg/encoding/asn1/#Unmarshal"><code>Unmarshal</code></a> now rejects tags and
      Object Identifiers which are not minimally encoded according to X.690 DER.
    </p>
  </dd>
</dl><!-- encoding/asn1 -->

<dl id="encoding/json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
  <dd>
    <p><!-- CL 199837 -->
      The package now has an internal limit to the maximum depth of
      nesting when decoding. This reduces the possibility that a
      deeply nested input could use large quantities of stack memory,
      or even cause a "goroutine stack exceeds limit" panic.
    </p>
  </dd>
</dl><!-- encoding/json -->

<dl id="flag"><dt><a href="/pkg/flag/">flag</a></dt>
  <dd>
    <p><!-- CL 221427 -->
      When the <code>flag</code> package sees <code>-h</code> or <code>-help</code>,
      and those flags are not defined, it now prints a usage message.
      If the <a href="/pkg/flag/#FlagSet"><code>FlagSet</code></a> was created with
      <a href="/pkg/flag/#ExitOnError"><code>ExitOnError</code></a>,
      <a href="/pkg/flag/#FlagSet.Parse"><code>FlagSet.Parse</code></a> would then
      exit with a status of 2. In this release, the exit status for <code>-h</code>
      or <code>-help</code> has been changed to 0. In particular, this applies to
      the default handling of command line flags.
    </p>
  </dd>
</dl>

<dl id="fmt"><dt><a href="/pkg/fmt/">fmt</a></dt>
  <dd>
    <p><!-- CL 215001 -->
      The printing verbs <code>%#g</code> and <code>%#G</code> now preserve
      trailing zeros for floating-point values.
    </p>
  </dd>
</dl><!-- fmt -->

<dl id="go/format"><dt><a href="/pkg/go/format/">go/format</a></dt>
  <dd>
    <p><!-- golang.org/issue/37476, CL 231461, CL 240683 -->
      The <a href="/pkg/go/format/#Source"><code>Source</code></a> and
      <a href="/pkg/go/format/#Node"><code>Node</code></a> functions
      now canonicalize number literal prefixes and exponents as part
      of formatting Go source code. This matches the behavior of the
      <a href="/pkg/cmd/gofmt/"><code>gofmt</code></a> command as it
      was implemented <a href="/doc/go1.13#gofmt">since Go 1.13</a>.
    </p>
  </dd>
</dl><!-- go/format -->

<dl id="html/template"><dt><a href="/pkg/html/template/">html/template</a></dt>
  <dd>
    <p><!-- CL 226097 -->
      The package now uses Unicode escapes (<code>\uNNNN</code>) in all
      JavaScript and JSON contexts. This fixes escaping errors in
      <code>application/ld+json</code> and <code>application/json</code>
      contexts.
    </p>
  </dd>
</dl><!-- html/template -->

<dl id="io/ioutil"><dt><a href="/pkg/io/ioutil/">io/ioutil</a></dt>
  <dd>
    <p><!-- CL 212597 -->
      <a href="/pkg/io/ioutil/#TempDir"><code>TempDir</code></a> and
      <a href="/pkg/io/ioutil/#TempFile"><code>TempFile</code></a>
      now reject patterns that contain path separators.
      That is, calls such as <code>ioutil.TempFile("/tmp",</code> <code>"../base*")</code> will no longer succeed.
      This prevents unintended directory traversal.
    </p>
  </dd>
</dl><!-- io/ioutil -->

<dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt>
  <dd>
    <p><!-- CL 230397 -->
      The new <a href="/pkg/math/big/#Int.FillBytes"><code>Int.FillBytes</code></a>
      method allows serializing to fixed-size pre-allocated byte slices.
    </p>
  </dd>
</dl><!-- math/big -->

<dl id="math/cmplx"><dt><a href="/pkg/math/cmplx/">math/cmplx</a></dt>
  <dd>
    <p><!-- CL 220689 -->
      The functions in this package were updated to conform to the C99 standard
      (Annex G IEC 60559-compatible complex arithmetic) with respect to handling
      of special arguments such as infinity, NaN and signed zero.
    </p>
  </dd>
</dl><!-- math/cmplx-->

<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
  <dd>
    <p><!-- CL 228645 -->
      If an I/O operation exceeds a deadline set by
      the <a href="/pkg/net/#Conn"><code>Conn.SetDeadline</code></a>,
      <code>Conn.SetReadDeadline</code>,
      or <code>Conn.SetWriteDeadline</code> methods, it will now
      return an error that is or wraps
      <a href="/pkg/os/#ErrDeadlineExceeded"><code>os.ErrDeadlineExceeded</code></a>.
      This may be used to reliably detect whether an error is due to
      an exceeded deadline.
      Earlier releases recommended calling the <code>Timeout</code>
      method on the error, but I/O operations can return errors for
      which <code>Timeout</code> returns <code>true</code> although a
      deadline has not been exceeded.
    </p>

    <p><!-- CL 228641 -->
      The new <a href="/pkg/net/#Resolver.LookupIP"><code>Resolver.LookupIP</code></a>
      method supports IP lookups that are both network-specific and accept a context.
    </p>
  </dd>
</dl>

<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
  <dd>
    <p><!-- CL 231418, CL 231419 -->
      Parsing is now stricter as a hardening measure against request smuggling attacks:
      non-ASCII white space is no longer trimmed like SP and HTAB, and support for the
      "<code>identity</code>" <code>Transfer-Encoding</code> was dropped.
    </p>
  </dd>
</dl><!-- net/http -->

<dl id="net/http/httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt>
  <dd>
    <p><!-- CL 230937 -->
      <a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a>
      now supports not modifying the <code>X-Forwarded-For</code>
      header when the incoming <code>Request.Header</code> map entry
      for that field is <code>nil</code>.
    </p>

    <p><!-- CL 224897 -->
      When a Switching Protocol (like WebSocket) request handled by
      <a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a>
      is canceled, the backend connection is now correctly closed.
    </p>
  </dd>
</dl>

<dl id="net/http/pprof"><dt><a href="/pkg/net/http/pprof/">net/http/pprof</a></dt>
  <dd>
    <p><!-- CL 147598, CL 229537 -->
      All profile endpoints now support a "<code>seconds</code>" parameter. When present,
      the endpoint profiles for the specified number of seconds and reports the difference.
      The meaning of the "<code>seconds</code>" parameter in the <code>cpu</code> profile and
      the trace endpoints is unchanged.
    </p>
  </dd>
</dl>

<dl id="net/url"><dt><a href="/pkg/net/url/">net/url</a></dt>
  <dd>
    <p><!-- CL 227645 -->
      The new <a href="/pkg/net/url/#URL"><code>URL</code></a> field
      <code>RawFragment</code> and method <a href="/pkg/net/url/#URL.EscapedFragment"><code>EscapedFragment</code></a>
      provide detail about and control over the exact encoding of a particular fragment.
      These are analogous to
      <code>RawPath</code> and <a href="/pkg/net/url/#URL.EscapedPath"><code>EscapedPath</code></a>.
    </p>
    <p><!-- CL 207082 -->
      The new <a href="/pkg/net/url/#URL"><code>URL</code></a>
      method <a href="/pkg/net/url/#URL.Redacted"><code>Redacted</code></a>
      returns the URL in string form with any password replaced with <code>xxxxx</code>.
    </p>
  </dd>
</dl>

<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
  <dd>
    <p><!-- CL -->
      If an I/O operation exceeds a deadline set by
      the <a href="/pkg/os/#File.SetDeadline"><code>File.SetDeadline</code></a>,
      <a href="/pkg/os/#File.SetReadDeadline"><code>File.SetReadDeadline</code></a>,
      or <a href="/pkg/os/#File.SetWriteDeadline"><code>File.SetWriteDeadline</code></a>
      methods, it will now return an error that is or wraps
      <a href="/pkg/os/#ErrDeadlineExceeded"><code>os.ErrDeadlineExceeded</code></a>.
      This may be used to reliably detect whether an error is due to
      an exceeded deadline.
      Earlier releases recommended calling the <code>Timeout</code>
      method on the error, but I/O operations can return errors for
      which <code>Timeout</code> returns <code>true</code> although a
      deadline has not been exceeded.
    </p>

    <p><!-- CL 232862 -->
      Packages <code>os</code> and <code>net</code> now automatically
      retry system calls that fail with <code>EINTR</code>. Previously
      this led to spurious failures, which became more common in Go
      1.14 with the addition of asynchronous preemption. Now this is
      handled transparently.
    </p>

    <p><!-- CL 229101 -->
      The <a href="/pkg/os/#File"><code>os.File</code></a> type now
      supports a <a href="/pkg/os/#File.ReadFrom"><code>ReadFrom</code></a>
      method. This permits the use of the <code>copy_file_range</code>
      system call on some systems when using
      <a href="/pkg/io/#Copy"><code>io.Copy</code></a> to copy data
      from one <code>os.File</code> to another. A consequence is that
      <a href="/pkg/io/#CopyBuffer"><code>io.CopyBuffer</code></a>
      will not always use the provided buffer when copying to a
      <code>os.File</code>. If a program wants to force the use of
      the provided buffer, it can be done by writing
      <code>io.CopyBuffer(struct{ io.Writer }{dst}, src, buf)</code>.
    </p>
  </dd>
</dl>

<dl id="plugin"><dt><a href="/pkg/plugin/">plugin</a></dt>
  <dd>
    <p><!-- CL 182959 -->
      DWARF generation is now supported (and enabled by default) for <code>-buildmode=plugin</code> on macOS.
    </p>
  </dd>
  <dd>
    <p><!-- CL 191617 -->
      Building with <code>-buildmode=plugin</code> is now supported on <code>freebsd/amd64</code>.
    </p>
  </dd>
</dl>

<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  <dd>
    <p><!-- CL 228902 -->
      Package <code>reflect</code> now disallows accessing methods of all
      non-exported fields, whereas previously it allowed accessing
      those of non-exported, embedded fields. Code that relies on the
      previous behavior should be updated to instead access the
      corresponding promoted method of the enclosing variable.
    </p>
  </dd>
</dl>

<dl id="regexp"><dt><a href="/pkg/regexp/">regexp</a></dt>
  <dd>
    <p><!-- CL 187919 -->
      The new <a href="/pkg/regexp/#Regexp.SubexpIndex"><code>Regexp.SubexpIndex</code></a>
      method returns the index of the first subexpression with the given name
      within the regular expression.
    </p>
  </dd>
</dl><!-- regexp -->

<dl id="pkg-runtime"><dt><a href="/pkg/runtime/">runtime</a></dt>
  <dd>
    <p><!-- CL 216557 -->
      Several functions, including
      <a href="/pkg/runtime/#ReadMemStats"><code>ReadMemStats</code></a>
      and
      <a href="/pkg/runtime/#GoroutineProfile"><code>GoroutineProfile</code></a>,
      no longer block if a garbage collection is in progress.
    </p>
  </dd>
</dl>

<dl id="pkg-runtime-pprof"><dt><a href="/pkg/runtime/pprof/">runtime/pprof</a></dt>
  <dd>
    <p><!-- CL 189318 -->
      The goroutine profile now includes the profile labels associated with each
      goroutine at the time of profiling. This feature is not yet implemented for
      the profile reported with <code>debug=2</code>.
    </p>
  </dd>
</dl>

<dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
  <dd>
    <p><!-- CL 216617 -->
      <a href="/pkg/strconv/#FormatComplex"><code>FormatComplex</code></a> and <a href="/pkg/strconv/#ParseComplex"><code>ParseComplex</code></a> are added for working with complex numbers.
    </p>
    <p>
      <a href="/pkg/strconv/#FormatComplex"><code>FormatComplex</code></a> converts a complex number into a string of the form (a+bi), where a and b are the real and imaginary parts.
    </p>
    <p>
      <a href="/pkg/strconv/#ParseComplex"><code>ParseComplex</code></a> converts a string into a complex number of a specified precision. <code>ParseComplex</code> accepts complex numbers in the format <code>N+Ni</code>.
    </p>
  </dd>
</dl><!-- strconv -->

<dl id="sync"><dt><a href="/pkg/sync/">sync</a></dt>
  <dd>
    <p><!-- CL 205899, golang.org/issue/33762 -->
      The new method
      <a href="/pkg/sync/#Map.LoadAndDelete"><code>Map.LoadAndDelete</code></a>
      atomically deletes a key and returns the previous value if present.
    </p>
    <p><!-- CL 205899 -->
      The method
      <a href="/pkg/sync/#Map.Delete"><code>Map.Delete</code></a>
      is more efficient.
    </p>
  </dd>
</dl><!-- sync -->

<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
  <dd>
    <p><!-- CL 231638 -->
      On Unix systems, functions that use
      <a href="/pkg/syscall/#SysProcAttr"><code>SysProcAttr</code></a>
      will now reject attempts to set both the <code>Setctty</code>
      and <code>Foreground</code> fields, as they both use
      the <code>Ctty</code> field but do so in incompatible ways.
      We expect that few existing programs set both fields.
    </p>
    <p>
      Setting the <code>Setctty</code> field now requires that the
      <code>Ctty</code> field be set to a file descriptor number in the
      child process, as determined by the <code>ProcAttr.Files</code> field.
      Using a child descriptor always worked, but there were certain
      cases where using a parent file descriptor also happened to work.
      Some programs that set <code>Setctty</code> will need to change
      the value of <code>Ctty</code> to use a child descriptor number.
    </p>

    <p><!-- CL 220578 -->
      It is <a href="/pkg/syscall/#Proc.Call">now possible</a> to call
      system calls that return floating point values
      on <code>windows/amd64</code>.
    </p>
  </dd>
</dl>

<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
  <dd>
    <p><!-- golang.org/issue/28135 -->
      The <code>testing.T</code> type now has a
      <a href="/pkg/testing/#T.Deadline"><code>Deadline</code></a> method
      that reports the time at which the test binary will have exceeded its
      timeout.
    </p>

    <p><!-- golang.org/issue/34129 -->
      A <code>TestMain</code> function is no longer required to call
      <code>os.Exit</code>. If a <code>TestMain</code> function returns,
      the test binary will call <code>os.Exit</code> with the value returned
      by <code>m.Run</code>.
    </p>

    <p><!-- CL 226877, golang.org/issue/35998 -->
       The new methods
       <a href="/pkg/testing/#T.TempDir"><code>T.TempDir</code></a> and
       <a href="/pkg/testing/#B.TempDir"><code>B.TempDir</code></a>
       return temporary directories that are automatically cleaned up
       at the end of the test.
    </p>

    <p><!-- CL 229085 -->
      <code>go</code> <code>test</code> <code>-v</code> now groups output by
      test name, rather than printing the test name on each line.
    </p>
  </dd>
</dl><!-- testing -->

<dl id="text/template"><dt><a href="/pkg/text/template/">text/template</a></dt>
  <dd>
    <p><!-- CL 226097 -->
      <a href="/pkg/text/template/#JSEscape"><code>JSEscape</code></a> now
      consistently uses Unicode escapes (<code>\u00XX</code>), which are
      compatible with JSON.
    </p>
  </dd>
</dl><!-- text/template -->

<dl id="time"><dt><a href="/pkg/time/">time</a></dt>
  <dd>
    <p><!-- CL 220424, CL 217362, golang.org/issue/33184 -->
       The new method
       <a href="/pkg/time/#Ticker.Reset"><code>Ticker.Reset</code></a>
       supports changing the duration of a ticker.
    </p>

    <p><!-- CL 227878 -->
      When returning an error, <a href="/pkg/time/#ParseDuration"><code>ParseDuration</code></a> now quotes the original value.
    </p>
  </dd>
</dl><!-- time -->
