<!--{
        "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 now 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 1.15 now generates Windows ASLR executables when -buildmode=pie
  cmd/link flag is provided. Go command uses -buildmode=pie by default
  on 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>

<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 explictly 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 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 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 232862 -->
  Go now retries system calls that return <code>EINTR</code>. This
  became more common in Go 1.14 with the addition of asynchronous
  preemption, but is now handled transparently.
</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>
TODO
</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 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>

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

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

<p>
TODO
</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>

<p>
TODO
</p>

<dl id="debug/pe"><dt><a href="/pkg/debug/pe/">debug/pe</a></dt>
  <dd>
    <p><!-- CL 222637 -->
      TODO: <a href="https://golang.org/cl/222637">https://golang.org/cl/222637</a>: copy some consts from cmd/link/internal/ld
    </p>
  </dd>
</dl><!-- debug/pe -->

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

<dl id="crypto/tls"><dt><a href="/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 permits using a context to both connect and handshake with a TLS server.
    </p>
  </dd>
</dl>

<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
  <dd>
    <p><!-- CL 205237 -->
      TODO: <a href="https://golang.org/cl/205237">https://golang.org/cl/205237</a>: load roots from colon separated SSL_CERT_DIR in loadSystemRoots
    </p>
  </dd>
</dl><!-- crypto/x509 -->

<dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
  <dd>
    <p><!-- CL 203417 -->
      TODO: <a href="https://golang.org/cl/203417">https://golang.org/cl/203417</a>: fix reserved namespace check to be case-insensitive
    </p>
  </dd>
</dl><!-- encoding/xml -->

<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, the flag package 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 -->
      TODO: <a href="https://golang.org/cl/215001">https://golang.org/cl/215001</a>: do not remove trailing zeros for %g and %G with #(sharp) flag
    </p>
  </dd>
</dl><!-- fmt -->

<dl id="io/ioutil"><dt><a href="/pkg/io/ioutil/">io/ioutil</a></dt>
  <dd>
    <p><!-- CL 212597 -->
      TODO: <a href="https://golang.org/cl/212597">https://golang.org/cl/212597</a>: reject path separators in TempDir, TempFile pattern
    </p>
  </dd>
</dl><!-- io/ioutil -->

<dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt>
  <dd>
    <p><!-- CL 230397 -->
      TODO: <a href="https://golang.org/cl/230397">https://golang.org/cl/230397</a>: add (*Int).FillBytes
    </p>
  </dd>
</dl><!-- math/big -->

<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 -->
      TODO: <a href="https://golang.org/cl/231418">https://golang.org/cl/231418</a>: only support &#34;chunked&#34; in inbound Transfer-Encoding headers
    </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 -->
      TODO: <a href="https://golang.org/cl/224897">https://golang.org/cl/224897</a>: make Switching Protocol requests (e.g. Websockets) cancelable
    </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>
  </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 reflect 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 -->
      TODO: <a href="https://golang.org/cl/187919">https://golang.org/cl/187919</a>: add (*Regexp).SubexpIndex
    </p>
  </dd>
</dl><!-- regexp -->

<dl id="pkg-runtime"><dt><a href="/pkg/runtime/">runtime</a></dt>
  <dd>
    <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 -->
      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 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>

    <p><!-- CL 216401 -->
      Converting small integer values 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>
  </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 specificed 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> and
       return temporary directories that are automatically cleaned up
       at the end of the test.
    </p>
  </dd>
</dl><!-- testing -->

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