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

<p>
  <strong>
    Go 1.15 is not yet released. These are work-in-progress
    release notes. Go 1.15 is expected to be released in August 2020.
  </strong>
</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.
</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>

<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="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>
  </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 231379 -->
      The deprecated, legacy behavior of treating the <code>CommonName</code>
      field as a hostname 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. If the <code>CommonName</code> is an invalid hostname, it's
      always ignored.
    </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 191783 -->
      Decoding a JSON array into a slice no longer reuses any existing slice elements,
      following the rules that the package documentation already stated.
    </p>

    <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 flag 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 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>
</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 -->
