<!--{
	"Title": "Go 1.8 Release Notes",
	"Path":  "/doc/go1.8",
	"Template": true
}-->

<!--
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>
ul li { margin: 0.5em 0; }
</style>

<h2 id="introduction">DRAFT RELEASE NOTES - Introduction to Go 1.8</h2>

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

<p>
The latest Go release, version 1.8, arrives six months after <a href="go1.7">Go 1.7</a>.
Most of its changes are in the implementation of the toolchain, runtime, and libraries.
There are <a href="#language">two minor changes</a> to the language specification.
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>
The release <a href="#ports">adds support for 32-bit MIPS</a>,
<a href="#compiler">updates the compiler back end</a> to generate more efficient code,
<a href="#gc">reduces GC pauses</a> by eliminating stop-the-world stack rescanning,
<a href="#h2push">adds HTTP/2 Push support</a>,
<a href="#http_shutdown">adds HTTP graceful shutdown</a>,
<a href="#more_context">adds more context support</a>,
<a href="#mutex_prof">enables profiling mutexes</a>,
and <a href="#sort_slice">simplifies sorting slices</a>.
</p>

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

<p>
  When explicitly converting a value from one struct type to another,
  as of Go 1.8 the tags are ignored. Thus two structs that differ
  only in their tags may be converted from one to the other:
</p>

<pre>
func example() {
	type T1 struct {
		X int `json:"foo"`
	}
	type T2 struct {
		X int `json:"bar"`
	}
	var v1 T1
	var v2 T2
	v1 = T1(v2) // now legal
}
</pre>


<p> <!-- CL 17711 -->
  The language specification now only requires that implementations
  support up to 16-bit exponents in floating-point constants.  This does not affect
  either the “<a href="/cmd/compile/"><code>gc</code></a>” or
  <code>gccgo</code> compilers, both of
  which still support 32-bit exponents.
</p>

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

<p>
Go now supports 32-bit MIPS on Linux for both big-endian
(<code>linux/mips</code>) and little-endian machines
(<code>linux/mipsle</code>) that implement the MIPS32r1 instruction set with FPU
or kernel FPU emulation. Note that many common MIPS-based routers lack an FPU and
have firmware that doesn't enable kernel FPU emulation; Go won't run on such machines.
</p>

<p>
On DragonFly BSD, Go now requires DragonFly 4.4.4 or later. <!-- CL 29491, CL 29971 -->
</p>

<p>
On OpenBSD, Go now requires OpenBSD 5.9 or later. <!-- CL 34093 -->
</p>

<p>
The Plan 9 port's networking support is now much more complete
and matches the behavior of Unix and Windows with respect to deadlines
and cancelation.
</p>

<p>
  Go 1.8 now only supports OS X 10.8 or later. This is likely the last
  Go release to support 10.8. Compiling Go or running
  binaries on older OS X versions is untested.
</p>

<p>
  Go 1.8 will be the last release to support Linux on ARMv5E and ARMv6 processors:
  Go 1.9 will likely require the ARMv6K (as found in the Raspberry Pi 1) or later.
  To identify whether a Linux system is ARMv6K or later, run
  “<code>go</code> <code>tool</code> <code>dist</code> <code>-check-armv6k</code>”
  (to facilitate testing, it is also possible to just copy the <code>dist</code> command to the
  system without installing a full copy of Go 1.8)
  and if the program terminates with output "ARMv6K supported." then the system
  implements ARMv6K or later.
  Go on non-Linux ARM systems already requires ARMv6K or later.
</p>


<h3 id="known_issues">Known Issues</h3>

<p>
There are some instabilities on FreeBSD and NetBSD that are known but not understood.
These can lead to program crashes in rare cases.
See
<a href="https://golang.org/issue/15658">issue 15658</a> and
<a href="https://golang.org/issue/16511">issue 16511</a>.
Any help in solving these issues would be appreciated.
</p>

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

<h3 id="cmd_asm">Assembler</h3>

<p>
For 64-bit x86 systems, the following instructions have been added:
<code>VBROADCASTSD</code>,
<code>BROADCASTSS</code>,
<code>MOVDDUP</code>,
<code>MOVSHDUP</code>,
<code>MOVSLDUP</code>,
<code>VMOVDDUP</code>,
<code>VMOVSHDUP</code>, and
<code>VMOVSLDUP</code>.
</p>

<p>
For 64-bit PPC systems, the common vector scalar instructions have been
added:
<code>LXS</code>,
<code>LXSDX</code>,
<code>LXSI</code>,
<code>LXSIWAX</code>,
<code>LXSIWZX</code>,
<code>LXV</code>,
<code>LXVD2X</code>,
<code>LXVDSX</code>,
<code>LXVW4X</code>,
<code>MFVSR</code>,
<code>MFVSRD</code>,
<code>MFVSRWZ</code>,
<code>MTVSR</code>,
<code>MTVSRD</code>,
<code>MTVSRWA</code>,
<code>MTVSRWZ</code>,
<code>STXS</code>,
<code>STXSDX</code>,
<code>STXSI</code>,
<code>STXSIWX</code>,
<code>STXV</code>,
<code>STXVD2X</code>,
<code>STXVW4X</code>,
<code>XSCV</code>,
<code>XSCVDPSP</code>,
<code>XSCVDPSPN</code>,
<code>XSCVDPSXDS</code>,
<code>XSCVDPSXWS</code>,
<code>XSCVDPUXDS</code>,
<code>XSCVDPUXWS</code>,
<code>XSCVSPDP</code>,
<code>XSCVSPDPN</code>,
<code>XSCVSXDDP</code>,
<code>XSCVSXDSP</code>,
<code>XSCVUXDDP</code>,
<code>XSCVUXDSP</code>,
<code>XSCVX</code>,
<code>XSCVXP</code>,
<code>XVCV</code>,
<code>XVCVDPSP</code>,
<code>XVCVDPSXDS</code>,
<code>XVCVDPSXWS</code>,
<code>XVCVDPUXDS</code>,
<code>XVCVDPUXWS</code>,
<code>XVCVSPDP</code>,
<code>XVCVSPSXDS</code>,
<code>XVCVSPSXWS</code>,
<code>XVCVSPUXDS</code>,
<code>XVCVSPUXWS</code>,
<code>XVCVSXDDP</code>,
<code>XVCVSXDSP</code>,
<code>XVCVSXWDP</code>,
<code>XVCVSXWSP</code>,
<code>XVCVUXDDP</code>,
<code>XVCVUXDSP</code>,
<code>XVCVUXWDP</code>,
<code>XVCVUXWSP</code>,
<code>XVCVX</code>,
<code>XVCVXP</code>,
<code>XXLAND</code>,
<code>XXLANDC</code>,
<code>XXLANDQ</code>,
<code>XXLEQV</code>,
<code>XXLNAND</code>,
<code>XXLNOR</code>,
<code>XXLOR</code>,
<code>XXLORC</code>,
<code>XXLORQ</code>,
<code>XXLXOR</code>,
<code>XXMRG</code>,
<code>XXMRGHW</code>,
<code>XXMRGLW</code>,
<code>XXPERM</code>,
<code>XXPERMDI</code>,
<code>XXSEL</code>,
<code>XXSI</code>,
<code>XXSLDWI</code>,
<code>XXSPLT</code>, and
<code>XXSPLTW</code>.
</p>

<h3 id="tool_yacc">Yacc</h3>

<p> <!-- CL 27324, CL 27325 -->
The <code>yacc</code> tool (previously available by running
“<code>go</code> <code>tool</code> <code>yacc</code>”) has been removed.
As of Go 1.7 it was no longer used by the Go compiler.
It has moved to the “tools” repository and is now available at
<code><a href="https://godoc.org/golang.org/x/tools/cmd/goyacc">golang.org/x/tools/cmd/goyacc</a></code>.
</p>

<h3 id="tool_fix">Fix</h3>

<p> <!-- CL 28872 -->
  The <code>fix</code> tool has a new “<code>context</code>”
  fix to change imports from “<code>golang.org/x/net/context</code>”
  to “<a href="/pkg/context/"><code>context</code></a>”.
</p>

<h3 id="tool_pprof">Pprof</h3>

<p> <!-- CL 33157 -->
  The <code>pprof</code> tool can now profile TLS servers
  and skip certificate validation by using the “<code>https+insecure</code>”
  URL scheme.
</p>

<p> <!-- CL 23781 -->
  The callgrind output now has instruction-level granularity.
</p>

<h3 id="tool_trace">Trace</h3>

<p> <!-- CL 23324 -->
  The <code>trace</code> tool has a new <code>-pprof</code> flag for
  producing pprof-compatible blocking and latency profiles from an
  execution trace.
</p>

<p> <!-- CL 30017, CL 30702 -->
  Garbage collection events are now shown more clearly in the
  execution trace viewer. Garbage collection activity is shown on its
  own row and GC helper goroutines are annotated with their roles.
</p>

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

<p>Vet is stricter in some ways and looser where it
  previously caused false positives.</p>

<p>Vet now checks for copying an array of locks,
  duplicate JSON and XML struct field tags,
  non-space-separated struct tags,
  deferred calls to HTTP <code>Response.Body.Close</code>
  before checking errors, and
  indexed arguments in <code>Printf</code>.
  It also improves existing checks.</p>
</p>

<h3 id="compiler">Compiler Toolchain</h3>

<p>
Go 1.7 introduced a new compiler back end for 64-bit x86 systems.
In Go 1.8, that back end has been developed further and is now used for
all architectures.
</p>

<p>
The new back end, based on
<a href="https://en.wikipedia.org/wiki/Static_single_assignment_form">static single assignment form</a> (SSA),
generates more compact, more efficient code
and provides a better platform for optimizations
such as bounds check elimination.
The new back end reduces the CPU time required by
<a href="https://golang.org/test/bench/go1/">our benchmark programs</a> by 20-30%
on 32-bit ARM systems. For 64-bit x86 systems, which already used the SSA back end in
Go 1.7, the gains are a more modest 0-10%. Other architectures will likely
see improvements closer to the 32-bit ARM numbers.
</p>

<p>
  The temporary <code>-ssa=0</code> compiler flag introduced in Go 1.7
  to disable the new back end has been removed in Go 1.8.
</p>

<p>
  In addition to enabling the new compiler back end for all systems,
  Go 1.8 also introduces a new compiler front end. The new compiler
  front end should not be noticeable to users but is the foundation for
  future performance work.
</p>

<p>
  The compiler and linker have been optimized and run faster in this
  release than in Go 1.7, although they are still slower than we would
  like and will continue to be optimized in future releases.
  Compared to the previous release, Go 1.8 is
  <a href="https://dave.cheney.net/2016/11/19/go-1-8-toolchain-improvements">about 15% faster</a>.
</p>

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

<p> <!-- CL 31141 -->
The Go tool now remembers the value of the <code>CGO_ENABLED</code> environment
variable set during <code>make.bash</code> and applies it to all future compilations
by default to fix issue <a href="https://golang.org/issue/12808">#12808</a>.
When doing native compilation, it is rarely necessary to explicitly set
the <code>CGO_ENABLED</code> environment variable as <code>make.bash</code>
will detect the correct setting automatically. The main reason to explicitly
set the <code>CGO_ENABLED</code> environment variable is when your environment
supports cgo, but you explicitly do not want cgo support, in which case, set
<code>CGO_ENABLED=0</code> during <code>make.bash</code> or <code>all.bash</code>.
</p>

<p> <!-- CL 29991 -->
The environment variable <code>PKG_CONFIG</code> may now be used to
set the program to run to handle <code>#cgo</code> <code>pkg-config</code>
directives.  The default is <code>pkg-config</code>, the program
always used by earlier releases.  This is intended to make it easier
to cross-compile
<a href="/cmd/cgo/">cgo</a> code.
</p>

<p> <!-- CL 32354 -->
The <a href="/cmd/cgo/">cgo</a> tool now supports a <code>-srcdir</code>
option, which is used by the <a href="/cmd/go/">go</a> command.
</p>

<p> <!-- CL 31768, 31811 -->
If <a href="/cmd/cgo/">cgo</a> code calls <code>C.malloc</code>, and
<code>malloc</code> returns <code>NULL</code>, the program will now
crash with an out of memory error.
<code>C.malloc</code> will never return <code>nil</code>.
Unlike most C functions, <code>C.malloc</code> may not be used in a
two-result form returning an errno value.
</p>

<p> <!-- CL 33237 -->
If <a href="/cmd/cgo/">cgo</a> is used to call a C function passing a
pointer to a C union, and if the C union can contain any pointer
values, and if <a href="/cmd/cgo/#hdr-Passing_pointers">cgo pointer
checking</a> is enabled (as it is by default), the union value is now
checked for Go pointers.
</p>

<h3 id="gccgo">Gccgo</h3>

<p>
Due to the alignment of Go's semiannual release schedule with GCC's
annual release schedule,
GCC release 6 contains the Go 1.6.1 version of gccgo.
We expect that the next release, GCC 7, will contain the Go 1.8
version of gccgo.
</p>

<h3 id="gopath">Default GOPATH</h3>

<p>
  The
  <a href="/cmd/go/#hdr-GOPATH_environment_variable"><code>GOPATH</code>
  environment variable</a> now has a default value if it
  is unset. It defaults to
  <code>$HOME/go</code> on Unix and
  <code>%USERPROFILE%/go</code> on Windows.
</p>

<h3 id="go_get">Go get</h3>

<p> <!-- CL 34818 -->
  The “<code>go</code> <code>get</code>” command now always respects
  HTTP proxy environment variables, regardless of whether
  the <code style='white-space:nowrap'>-insecure</code> flag is used. In previous releases, the
  <code style='white-space:nowrap'>-insecure</code> flag had the side effect of not using proxies.
</p>

<h3 id="go_bug">Go bug</h3>

<p>
  The new
  “<a href="/cmd/go/#hdr-Print_information_for_bug_reports"><code>go</code> <code>bug</code></a>”
  command starts a bug report on GitHub, prefilled
  with information about the current system.
</p>

<h3 id="cmd_doc">Go doc</h3>

<p> <!-- CL 25419 -->
  The
  “<a href="/cmd/go/#hdr-Show_documentation_for_package_or_symbol"><code>go</code> <code>doc</code></a>”
  command now groups constants and variables with their type,
  following the behavior of
  <a href="/cmd/godoc/"><code>godoc</code></a>.
</p>

<p> <!-- CL 25420 -->
  In order to improve the readability of <code>doc</code>'s
  output, each summary of the first-level items is guaranteed to
  occupy a single line.
</p>

<p> <!-- CL 31852 -->
  Documentation for a specific method in an interface definition can
  now be requested, as in
  “<code>go</code> <code>doc</code> <code>net.Conn.SetDeadline</code>”.
</p>

<h3 id="plugin">Plugins</h3>

<p>
  Go now supports a “<code>plugin</code>” build mode for generating
  plugins written in Go, and a
  new <a href="/pkg/plugin/"><code>plugin</code></a> package for
  loading such plugins at run time. Plugin support is only currently
  available on Linux.
</p>

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

<h3 id="liveness">Argument Liveness</h3>

<p>
  <!-- Issue 15843 --> The garbage collector no longer considers
  arguments live throughout the entirety of a function. For more
  information, and for how to force a variable to remain live, see
  the <a href="/pkg/runtime/#KeepAlive"><code>runtime.KeepAlive</code></a>
  function added in Go 1.7.
</p>

<p>
  <i>Updating:</i>
  Code that sets a finalizer on an allocated object may need to add
  calls to <code>runtime.KeepAlive</code> in functions or methods
  using that object.
  Read the
  <a href="/pkg/runtime/#KeepAlive"><code>KeepAlive</code>
  documentation</a> and its example for more details.
</p>

<h3 id="mapiter">Concurrent Map Misuse</h3>

<p>
In Go 1.6, the runtime
<a href="/doc/go1.6#runtime">added lightweight,
best-effort detection of concurrent misuse of maps</a>. This release
improves that detector with support for detecting programs that
concurrently write to and iterate over a map.
</p>
<p>
As always, if one goroutine is writing to a map, no other goroutine should be
reading (which includes iterating) or writing the map concurrently.
If the runtime detects this condition, it prints a diagnosis and crashes the program.
The best way to find out more about the problem is to run the program
under the
<a href="https://blog.golang.org/race-detector">race detector</a>,
which will more reliably identify the race
and give more detail.
</p>

<h3 id="memstats">MemStats Documentation</h3>

<p> <!-- CL 28972 -->
  The <a href="/pkg/runtime/#MemStats"><code>runtime.MemStats</code></a>
  type has been more thoroughly documented.
</p>

<h2 id="performance">Performance</h2>

<p>
As always, the changes are so general and varied that precise statements
about performance are difficult to make.
Most programs should run a bit faster,
due to speedups in the garbage collector and
optimizations in the standard library.
</p>

<p>
There have been optimizations to implementations in the
<a href="/pkg/bytes/"><code>bytes</code></a>,
<a href="/pkg/crypto/aes/"><code>crypto/aes</code></a>,
<a href="/pkg/crypto/cipher/"><code>crypto/cipher</code></a>,
<a href="/pkg/crypto/elliptic/"><code>crypto/elliptic</code></a>,
<a href="/pkg/crypto/sha256/"><code>crypto/sha256</code></a>,
<a href="/pkg/crypto/sha512/"><code>crypto/sha512</code></a>,
<a href="/pkg/encoding/asn1/"><code>encoding/asn1</code></a>,
<a href="/pkg/encoding/csv/"><code>encoding/csv</code></a>,
<a href="/pkg/encoding/hex/"><code>encoding/hex</code></a>,
<a href="/pkg/encoding/json/"><code>encoding/json</code></a>,
<a href="/pkg/hash/crc32/"><code>hash/crc32</code></a>,
<a href="/pkg/image/color/"><code>image/color</code></a>,
<a href="/pkg/image/draw/"><code>image/draw</code></a>,
<a href="/pkg/math/"><code>math</code></a>,
<a href="/pkg/math/big/"><code>math/big</code></a>,
<a href="/pkg/reflect/"><code>reflect</code></a>,
<a href="/pkg/regexp/"><code>regexp</code></a>,
<a href="/pkg/runtime/"><code>runtime</code></a>,
<a href="/pkg/strconv/"><code>strconv</code></a>,
<a href="/pkg/strings/"><code>strings</code></a>,
<a href="/pkg/syscall/"><code>syscall</code></a>,
<a href="/pkg/text/template/"><code>text/template</code></a>, and
<a href="/pkg/unicode/utf8/"><code>unicode/utf8</code></a>
packages.
</p>

<h3 id="gc">Garbage Collector</h3>

<p>
  Garbage collection pauses should be significantly shorter than they
  were in Go 1.7, usually under 100 microseconds and often as low as
  10 microseconds.
  See the
  <a href="https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md"
     >document on eliminating stop-the-world stack re-scanning</a>
  for details.  More work remains for Go 1.9.
</p>

<h3 id="defer">Defer</h3>

<!-- CL 29656, CL 29656 -->
<p>
  The overhead of <a href="/ref/spec/#Defer_statements">deferred
  function calls</a> has been reduced by about half.
</p>

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

<p>The overhead of calls from Go into C has been reduced by about half.</p>

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

<h3 id="examples">Examples</h3>

<p>
Examples have been added to the documentation across many packages.
</p>

<h3 id="sort_slice">Sort</h3>

<p>
The <a href="/pkg/sort/">sort</a> package
now includes a convenience function
<a href="/pkg/sort/#Slice"><code>Slice</code></a> to sort a
slice given a <em>less</em> function.

In many cases this means that writing a new sorter type is not
necessary.
</p>

<p>
Also new are
<a href="/pkg/sort/#SliceStable"><code>SliceStable</code></a> and
<a href="/pkg/sort/#SliceIsSorted"><code>SliceIsSorted</code></a>.
</p>

<h3 id="h2push">HTTP/2 Push</h3>

<p>
The <a href="/pkg/net/http/">net/http</a> package now includes a
mechanism to
send HTTP/2 server pushes from a
<a href="/pkg/net/http/#Handler"><code>Handler</code></a>.
Similar to the existing <code>Flusher</code> and <code>Hijacker</code>
interfaces, an HTTP/2
<a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>
now implements the new
<a href="/pkg/net/http/#Pusher"><code>Pusher</code></a> interface.
</p>

<h3 id="http_shutdown">HTTP Server Graceful Shutdown</h3>

<p> <!-- CL 32329 -->
  The HTTP Server now has support for graceful shutdown using the new
  <a href="/pkg/net/http/#Server.Shutdown"><code>Server.Shutdown</code></a>
  method and abrupt shutdown using the new
  <a href="/pkg/net/http/#Server.Close"><code>Server.Close</code></a>
  method.
</p>

<h3 id="more_context">More Context Support</h3>

<p>
  Continuing <a href="/doc/go1.7#context">Go 1.7's adoption</a>
  of <a href="/pkg/context/#Context"><code>context.Context</code></a>
  into the standard library, Go 1.8 adds more context support
  to existing packages:
</p>

<ul>
  <li>The new <a href="/pkg/net/http/#Server.Shutdown"><code>Server.Shutdown</code></a>
    takes a context argument.</li>
  <li>There have been <a href="#database_sql">significant additions</a> to the
    <a href="/pkg/database/sql/">database/sql</a> package with context support.</li>
  <li>All nine of the new <code>Lookup</code> methods on the new
    <a href="/pkg/net/#Resolver"><code>net.Resolver</code></a> now
    take a context.</li>
  </ul>

<h3 id="mutex_prof">Mutex Contention Profiling</h3>

<p>
  The runtime and tools now support profiling contended mutexes.
</p>

<p>
  Most users will want to use the new <code>-mutexprofile</code>
  flag with “<a href="/cmd/go/#hdr-Description_of_testing_flags"><code>go</code> <code>test</code></a>”,
  and then use <a href="/cmd/pprof/">pprof</a> on the resultant file.
</p>

<p>
  Lower-level support is also available via the new
  <a href="/pkg/runtime/#MutexProfile"><code>MutexProfile</code></a>
  and
  <a href="/pkg/runtime/#SetMutexProfileFraction"><code>SetMutexProfileFraction</code></a>.
</p>

<p>
  A known limitation for Go 1.8 is that the profile only reports contention for
  <a href="/pkg/sync/#Mutex"><code>sync.Mutex</code></a>,
  not 
  <a href="/pkg/sync/#RWMutex"><code>sync.RWMutex</code></a>.
</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. The following sections list the user visible changes and additions.
Optimizations and minor bug fixes are not listed.
</p>

<dl id="archive_tar"><dt><a href="/pkg/archive/tar/">archive/tar</a></dt>
  <dd>

    <p> <!-- CL 28471, CL 31440, CL 31441, CL 31444, CL 28418, CL 31439 -->
      The tar implementation corrects many bugs in corner cases of the file format.
      The <a href="/pkg/archive/tar/#Reader"><code>Reader</code></a>
      is now able to process tar files in the PAX format with entries larger than 8GB.
      The <a href="/pkg/archive/tar/#Writer"><code>Writer</code></a>
      no longer produces invalid tar files in some situations involving long pathnames.
    </p>

  </dd>
</dl>

<dl id="compress_flate"><dt><a href="/pkg/compress/flate/">compress/flate</a></dt>
  <dd>

    <p> <!-- CL 31640, CL 31174, CL 32149 -->
      There have been some minor fixes to the encoder to improve the
      compression ratio in certain situations. As a result, the exact
      encoded output of <code>DEFLATE</code> may be different from Go 1.7. Since
      <code>DEFLATE</code> is the underlying compression of gzip, png, zlib, and zip,
      those formats may have changed outputs.
    </p>

    <p> <!-- CL 31174 -->
      The encoder, when operating in
      <a href="/pkg/compress/flate/#NoCompression"><code>NoCompression</code></a>
      mode, now produces a consistent output that is not dependent on
      the size of the slices passed to the
      <a href="/pkg/compress/flate/#Writer.Write"><code>Write</code></a>
      method.
    </p>

    <p> <!-- CL 28216 -->
      The decoder, upon encountering an error, now returns any
      buffered data it had uncompressed along with the error.
    </p>

  </dd>
</dl>


<dl id="compress_gzip"><dt><a href="/pkg/compress/gzip/">compress/gzip</a></dt>
  <dd>

    <p>
      The <a href="/pkg/compress/gzip/#Writer"><code>Writer</code></a>
      now encodes a zero <code>MTIME</code> field when
      the <a href="/pkg/compress/gzip/#Header"><code>Header.ModTime</code></a>
      field is the zero value.

      In previous releases of Go, the <code>Writer</code> would encode
      a nonsensical value.

      Similarly,
      the <a href="/pkg/compress/gzip/#Reader"><code>Reader</code></a>
      now reports a zero encoded <code>MTIME</code> field as a zero
      <code>Header.ModTime</code>.
    </p>

  </dd>
</dl>

<dl id="context"><dt><a href="/pkg/context/">context</a></dt>
  <dd>
    <p> <!-- CL 30370 -->
      The <a href="/pkg/context#DeadlineExceeded"><code>DeadlineExceeded</code></a>
      error now implements
      <a href="/pkg/net/#Error"><code>net.Error</code></a>
      and reports true for both the <code>Timeout</code> and
      <code>Temporary</code> methods.
    </p>
  </dd>
</dl>

<dl id="crypto_tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
  <dd>
    <p> <!-- CL 25159, CL 31318 -->
      The new method
      <a href="/pkg/crypto/tls/#Conn.CloseWrite"><code>Conn.CloseWrite</code></a>
      allows TLS connections to be half closed.
    </p>

    <p> <!-- CL 28075 -->
      The new method
      <a href="/pkg/crypto/tls/#Config.Clone"><code>Config.Clone</code></a>
      clones a TLS configuration.
    </p>

    <p>
      <!-- CL 30790 -->
      The new <a href="/pkg/crypto/tls/#Config.GetConfigForClient"><code>Config.GetConfigForClient</code></a>
      callback allows selecting a configuration for a client dynamically, based
      on the client's
      <a href="/pkg/crypto/tls/#ClientHelloInfo"><code>ClientHelloInfo</code></a>.

      <!-- CL 31391, CL 32119 -->
      The <a href="/pkg/crypto/tls/#ClientHelloInfo"><code>ClientHelloInfo</code></a>
      struct now has new
      fields <code>Conn</code>, <code>SignatureSchemes</code> (using
      the new
      type <a href="/kg/crypto/tls/#SignatureScheme"><code>SignatureScheme</code></a>),
      <code>SupportedProtos</code>, and <code>SupportedVersions</code>.
    </p>

    <p> <!-- CL 32115 -->
      The new <a href="/pkg/crypto/tls/#Config.GetClientCertificate"><code>Config.GetClientCertificate</code></a>
      callback allows selecting a client certificate based on the server's
      TLS <code>CertificateRequest</code> message, represented by the new
      <a href="/pkg/crypto/tls/#CertificateRequestInfo"><code>CertificateRequestInfo</code></a>.
    </p>

    <p> <!-- CL 27434 -->
      The new
      <a href="/pkg/crypto/tls/#Config.KeyLogWriter"><code>Config.KeyLogWriter</code></a>
      allows debugging TLS connections
      in <a href="https://www.wireshark.org/">WireShark</a> and
      similar tools.
    </p>

    <p> <!-- CL 32115 -->
      The new
      <a href="/pkg/crypto/tls/#Config.VerifyPeerCertificate"><code>Config.VerifyPeerCertificate</code></a>
      callback allows additional validation of a peer's presented certificate.
    </p>

    <p> <!-- CL 18130 -->
      The <code>crypto/tls</code> package now implements basic
      countermeasures against CBC padding oracles. There should be
      no explicit secret-dependent timings, but it does not attempt to
      normalize memory accesses to prevent cache timing leaks.
    </p>

    <p>
      The <code>crypto/tls</code> package now supports
      X25519 and <!-- CL 30824, CL 30825 -->
      ChaCha20-Poly1305.  <!-- CL 30957, CL 30958 -->
      ChaCha20-Poly1305 is now prioritized unless <!-- CL 32871 -->
      hardware support for AES-GCM is present.
    </p>

    <p> <!-- CL 27315 -->
      AES-128-CBC cipher suites with SHA-256 are also
      now supported.
    </p>

  </dd>
</dl>

<dl id="crypto_x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
  <dd>
    <p> <!-- CL 30578 -->
      <a href="/pkg/crypto/x509/#SystemCertPool"><code>SystemCertPool</code></a>
      is now implemented on Windows.
    </p>

    <p> <!-- CL 24743 -->
      PSS signatures are now supported.
    </p>

    <p> <!-- CL 32644 -->
      <a href="/pkg/crypto/x509/#UnknownAuthorityError"><code>UnknownAuthorityError</code></a>
      now has a <code>Cert</code> field, reporting the untrusted
      certificate.
    </p>

    <p>
      Certificate validation is more permissive in a few cases and
      stricter in a few other cases.
    <!--
crypto/x509: allow a leaf certificate to be specified directly as root (CL 27393)
crypto/x509: check that the issuer name matches the issuer's subject name (CL 23571)
crypto/x509: don't accept a root that already appears in a chain. (CL 32121)
crypto/x509: fix name constraints handling (CL 30155)
crypto/x509: parse all names in an RDN (CL 30810)
crypto/x509: recognise ISO OID for RSA+SHA1 (CL 27394)
crypto/x509: require a NULL parameters for RSA public keys (CL 16166, CL 27312)
crypto/x509: return error for missing SerialNumber (CL 27238)
-->
    </p>

    <p><!-- CL 30375 -->
      Root certificates will now also be looked for
      at <code>/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem</code>
      on Linux, to support RHEL and CentOS.
    </p>

  </dd>
</dl>

<dl id="database_sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt>
  <dd>
    <p>
      The package now supports <code>context.Context</code>. There are new methods
      ending in <code>Context</code> such as
      <a href="/pkg/database/sql/#DB.QueryContext"><code>DB.QueryContext</code></a> and
      <a href="/pkg/database/sql/#DB.PrepareContext"><code>DB.PrepareContext</code></a>
      that take context arguments. Using the new <code>Context</code> methods ensures that
      connections are closed and returned to the connection pool when the
      request is done; enables canceling in-progress queries
      should the driver support that; and allows the database
      pool to cancel waiting for the next available connection.
    </p>
    <p>
      The <a href="/pkg/database/sql#IsolationLevel"><code>IsolationLevel</code></a>
      can now be set when starting a transaction by setting the isolation level
      on the <code>Context</code> then passing that <code>Context</code> to
      <a href="/pkg/database/sql#DB.BeginContext"><code>DB.BeginContext</code></a>.
      An error will be returned if an isolation level is selected that the driver
      does not support. A read-only attribute may also be set on the transaction
      with <a href="/pkg/database/sql/#ReadOnlyContext"><code>ReadOnlyContext</code></a>.
    </p>
    <p>
      Queries now expose the SQL column type information for drivers that support it.
      Rows can return <a href="/pkg/database/sql#Rows.ColumnTypes"><code>ColumnTypes</code></a>
      which can include SQL type information, column type lengths, and the Go type.
    </p>
    <p>
      A <a href="/pkg/database/sql/#Rows"><code>Rows</code></a>
      can now represent multiple result sets. After
      <a href="/pkg/database/sql/#Rows.Next"><code>Rows.Next</code></a> returns false,
      <a href="/pkg/database/sql/#Rows.NextResultSet"><code>Rows.NextResultSet</code></a>
      may be called to advance to the next result set. The existing <code>Rows</code>
      should continue to be used after it advances to the next result set.
      </p>
    <p>
      <a href="/pkg/database/sql/#NamedArg"><code>NamedArg</code></a> may be used
      as query arguments. The new function <a href="/pkg/database/sql/#Named"><code>Named</code></a>
      helps create a <a href="/pkg/database/sql/#NamedArg"><code>NamedArg</code></a>
      more succinctly.
    <p>
      If a driver supports the new
      <a href="/pkg/database/sql/driver/#Pinger"><code>Pinger</code></a>
      interface, the
      <a href="/pkg/database/sql/#DB.Ping"><code>DB.Ping</code></a>
      and
      <a href="/pkg/database/sql/#DB.PingContext"><code>DB.PingContext</code></a>
      methods will use that interface to check whether a
      database connection is still valid.
    </p>
    <p>
      The new <code>Context</code> query methods work for all drivers, but
      <code>Context</code> cancelation is not responsive unless the driver has been
      updated to use them. The other features require driver support in
      <a href="/pkg/database/sql/driver"><code>database/sql/driver</code></a>.
      Driver authors should review the new interfaces. Users of existing
      driver should review the driver documentation to see what
      it supports and any system specific documentation on each feature.
    </p>
  </dd>
</dl>

<dl id="debug_pe"><dt><a href="/pkg/debug/pe/">debug/pe</a></dt>
  <dd>
    <p> <!-- CL 22720, CL 27212, CL 22181, CL 22332, CL 22336, Issue 15345 -->
      The package has been extended and is now used by
      <a href="/cmd/link/">the Go linker</a> to read <code>gcc</code>-generated object files.
      The new
      <a href="/pkg/debug/pe/#File.StringTable"><code>File.StringTable</code></a>
      and
      <a href="/pkg/debug/pe/#Section.Relocs"><code>Section.Relocs</code></a>
      fields provide access to the COFF string table and COFF relocations.
      The new
      <a href="/pkg/debug/pe/#File.COFFSymbols"><code>File.COFFSymbols</code></a>
      allows low-level access to the COFF symbol table.
      </p>
  </dd>
</dl>

<dl id="encoding_base64"><dt><a href="/pkg/encoding/base64/">encoding/base64</a></dt>
  <dd>
    <p> <!-- CL 24964 -->
      The new
      <a href="/pkg/encoding/base64/#Encoding.Strict"><code>Encoding.Strict</code></a>
      method returns an <code>Encoding</code> that causes the decoder
      to return an error when the trailing padding bits are not zero.
    </p>
  </dd>
</dl>

<dl id="encoding_binary"><dt><a href="/pkg/encoding/binary/">encoding/binary</a></dt>
  <dd>
    <p> <!-- CL 28514 -->
      <a href="/pkg/encoding/binary/#Read"><code>Read</code></a>
      and
      <a href="/pkg/encoding/binary/#Write"><code>Write</code></a>
      now support booleans.
    </p>
  </dd>
</dl>

<dl id="encoding_json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
  <dd>

    <p> <!-- CL 18692  -->
      <a href="/pkg/encoding/json/#UnmarshalTypeError"><code>UnmarshalTypeError</code></a>
      now includes the struct and field name.
    </p>

    <p> <!-- CL 31932 -->
      A nil <a href="/pkg/encoding/json/#Marshaler"><code>Marshaler</code></a>
      now marshals as a JSON <code>null</code> value.
    </p>

    <p> <!-- CL 21811 -->
      A <a href="/pkg/encoding/json/#RawMessage"><code>RawMessage</code></a> value now
      marshals the same as its pointer type.
    </p>

    <p> <!-- CL 30371 -->
      <a href="/pkg/encoding/json/#Marshal"><code>Marshal</code></a>
      encodes floating-point numbers using the same format as in ES6,
      preferring decimal (not exponential) notation for a wider range of values.
      In particular, all floating-point integers up to 2<sup>64</sup> format the
      same as the equivalent <code>int64</code> representation.
    </p>

    <p> <!-- CL 30944 -->
      In previous versions of Go, unmarshaling a JSON <code>null</code> into an
      <a href="/pkg/encoding/json/#Unmarshaler"><code>Unmarshaler</code></a>
      was considered a no-op; now the <code>Unmarshaler</code>'s
      <code>UnmarshalJSON</code> method is called with the JSON literal
      <code>null</code> and can define the semantics of that case.
    </p>

  </dd>
</dl>

<dl id="encoding_pem"><dt><a href="/pkg/encoding/pem/">encoding/pem</a></dt>
  <dd>
    <p> <!-- CL 27391 -->
      <a href="/pkg/encoding/pem/#Decode"><code>Decode</code></a>
      is now strict about the format of the ending line.
    </p>
  </dd>
</dl>

<dl id="encoding_xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
  <dd>
    <p> <!-- CL 30946 -->
      <a href="/pkg/encoding/xml/#Unmarshal"><code>Unmarshal</code></a>
      now has wildcard support for collecting all attributes using
      the new <code>",any,attr"</code> struct tag.
    </p>
  </dd>
</dl>

<dl id="expvar"><dt><a href="/pkg/expvar/">expvar</a></dt>
  <dd>
    <p> <!-- CL 30917 -->
      The new methods
      <a href="/pkg/expvar/#Int.Value"><code>Int.Value</code></a>,
      <a href="/pkg/expvar/#String.Value"><code>String.Value</code></a>,
      <a href="/pkg/expvar/#Float.Value"><code>Float.Value</code></a>, and
      <a href="/pkg/expvar/#Func.Value"><code>Func.Value</code></a>
      report the current value of an exported variable.
    </p>

    <p> <!-- CL 24722 -->
      The new
      function <a href="/pkg/expvar/#Handler"><code>Handler</code></a>
      returns the package's HTTP handler, to enable installing it in
      non-standard locations.
      </p>
  </dd>
</dl>

<dl id="fmt"><dt><a href="/pkg/fmt/">fmt</a></dt>
  <dd>
    <p><!-- CL 30611 -->
      <a href="/pkg/fmt/#Scanf"><code>Scanf</code></a>,
      <a href="/pkg/fmt/#Fscanf"><code>Fscanf</code></a>, and
      <a href="/pkg/fmt/#Sscanf"><code>Sscanf</code></a> now
      handle spaces differently and more consistently than
      previous releases. See the
      <a href="/pkg/fmt/#hdr-Scanning">scanning documentation</a>
      for details.
    </p>
  </dd>
</dl>

<dl id="go_doc"><dt><a href="/pkg/go/doc/">go/doc</a></dt>
  <dd>
    <p><!-- CL 29870 -->
      The new <a href="/pkg/go/doc/#IsPredeclared"><code>IsPredeclared</code></a>
      function reports whether a string is a predeclared identifier.
    </p>
  </dd>
</dl>

<dl id="go_types"><dt><a href="/pkg/go/types/">go/types</a></dt>
  <dd>
    <p><!-- CL 30715 -->
      The new function
      <a href="/pkg/go/types/#Default"><code>Default</code></a>
      returns the default "typed" type for an "untyped" type.
    </p>

    <p><!-- CL 31939 -->
      The alignment of <code>complex64</code> now matches
      the <a href="/cmd/compile/">Go compiler</a>.
    </p>
  </dd>
</dl>

<dl id="html_template"><dt><a href="/pkg/html/template/">html/template</a></dt>
  <dd>
    <p><!-- CL 14336 -->
      The package now validates
      the <code>"type"</code> attribute on
      a <code>&lt;script&gt;</code> tag.
    </p>
  </dd>
</dl>

<dl id="image_png"><dt><a href="/pkg/image/png/">image/png</a></dt>
  <dd>
    <p> <!-- CL 32143, CL 32140 -->
      <a href="/pkg/image/png/#Decode"><code>Decode</code></a>
      (and <code>DecodeConfig</code>)
      now supports True Color and grayscale transparency.
    </p>
    <p> <!-- CL 29872 -->
      <a href="/pkg/image/png/#Encoder"><code>Encoder</code></a>
      is now faster and creates smaller output
      when encoding paletted images.
      </p>
  </dd>
</dl>

<dl id="math_big"><dt><a href="/pkg/math/big/">math/big</a></dt>
  <dd>
    <p><!-- CL 30706 -->
      The new method
      <a href="/pkg/math/big/#Int.Sqrt"><code>Int.Sqrt</code></a>
      calculates ⌊√x⌋.
    </p>

    <p>
      The new method
      <a href="/pkg/math/big/#Float.Scan"><code>Float.Scan</code></a>
      is a support routine for
      <a href="/pkg/fmt/#Scanner"><code>fmt.Scanner</code></a>.
    </p>

    <p>
      <a href="/pkg/math/big/#Int.ModInverse"><code>Int.ModInverse</code></a>
      now supports negative numbers.
    </p>

  </dd>
</dl>

<dl id="math_rand"><dt><a href="/pkg/math/rand/">math/rand</a></dt>
  <dd>

    <p><!-- CL 27253, CL 33456 -->
      The new <a href="/pkg/math/rand/#Rand.Uint64"><code>Rand.Uint64</code></a>
      method returns <code>uint64</code> values. The
      new <a href="/pkg/math/rand/#Source64"><code>Source64</code></a>
      interface describes sources capable of generating such values
      directly; otherwise the <code>Rand.Uint64</code> method
      constructs a <code>uint64</code> from two calls
      to <a href="/pkg/math/rand/#Source"><code>Source</code></a>'s
      <code>Int63</code> method.
    </p>

  </dd>
</dl>

<dl id="mime"><dt><a href="/pkg/mime/">mime</a></dt>
  <dd>
    <p> <!-- CL 32175 -->
    <a href="/pkg/mime/#ParseMediaType"><code>ParseMediaType</code></a>
    now preserves unnecessary backslash escapes as literals,
    in order to support MSIE.
    When MSIE sends a full file path (in “intranet mode”), it does not
    escape backslashes: “<code>C:\dev\go\foo.txt</code>”, not
    “<code>C:\\dev\\go\\foo.txt</code>”.
    If we see an unnecessary backslash escape, we now assume it is from MSIE
    and intended as a literal backslash.
    No known MIME generators emit unnecessary backslash escapes
    for simple token characters like numbers and letters.
    </p>
  </dd>
</dl>

<dl id="mime_quotedprintable"><dt><a href="/pkg/mime/quotedprintable/">mime/quotedprintable</a></dt>
  <dd>

    <p>
      The
      <a href="/pkg/mime/quotedprintable/#Reader"><code>Reader</code></a>'s
      parsing has been relaxed in two ways to accept
      more input seen in the wild.

      <!-- CL 32174 -->
      First, it accepts an equals sign (<code>=</code>) not followed
      by two hex digits as a literal equal sign.

      <!-- CL 27530 -->
      Second, it silently ignores a trailing equals sign at the end of
      an encoded input.
    </p>

  </dd>
</dl>

<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
  <dd>

    <p><!-- CL 30164, CL 33473 -->
      The <a href="/pkg/net/#Conn"><code>Conn</code></a> documentation
      has been updated to clarify expectations of an interface
      implementation. Updates in the <code>net/http</code> packages
      depend on implementations obeying the documentation.
    </p>
    <p><i>Updating:</i> implementations of the <code>Conn</code> interface should verify
      they implement the documented semantics. The
      <a href="https://godoc.org/golang.org/x/net/nettest">golang.org/x/net/nettest</a>
      package will exercise a <code>Conn</code> and validate it behaves properly.
    </p>

    <p><!-- CL 32099 -->
      The new method
      <a href="/pkg/net/#UnixListener.SetUnlinkOnClose"><code>UnixListener.SetUnlinkOnClose</code></a>
      sets whether the underlying socket file should be removed from the file system when
      the listener is closed.
    </p>

    <p><!-- CL 29951 -->
      The new <a href="/pkg/net/#Buffers"><code>Buffers</code></a> type permits
      writing to the network more efficiently from multiple discontiguous buffers
      in memory. On certain machines, for certain types of connections,
      this is optimized into an OS-specific batch write operation (such as <code>writev</code>).
    </p>

    <p><!-- CL 29440 -->
      The new <a href="/pkg/net/#Resolver"><code>Resolver</code></a> looks up names and numbers
      and supports <a href="/pkg/context/#Context"><code>context.Context</code></a>.
      The <a href="/pkg/net/#Dialer"><code>Dialer</code></a> now has an optional
      <a href="/pkg/net/#Dialer.Resolver"><code>Resolver</code> field</a>.
    </p>

    <p><!-- CL 29892 -->
      <a href="/pkg/net/#Interfaces"><code>Interfaces</code></a> is now supported on Solaris.
    </p>

    <p><!-- CL 29233, CL 24901 -->
      The Go DNS resolver now supports <code>resolv.conf</code>'s “<code>rotate</code>”
      and “<code>option</code> <code>ndots:0</code>” options. The “<code>ndots</code>” option is
      now respected in the same way as <code>libresolve</code>.
    </p>

  </dd>
</dl>

<dl id="net_http"><dt><a href="/pkg/net/http/">net/http</a></dt>
  <dd>

    <p>Server changes:</p>
    <ul>
      <li>The server now supports graceful shutdown support, <a href="#http_shutdown">mentioned above</a>.</li>

      <li> <!-- CL 32024 -->
        The <a href="/pkg/net/http/#Server"><code>Server</code></a>
        adds configuration options
        <code>ReadHeaderTimeout</code> and <code>IdleTimeout</code>
        and documents <code>WriteTimeout</code>.
      </li>

      <li> <!-- CL 32014 -->
        <a href="/pkg/net/http/#FileServer"><code>FileServer</code></a>
        and
        <a href="/pkg/net/http/#ServeContent"><code>ServeContent</code></a>
        now support HTTP <code>If-Match</code> conditional requests,
        in addition to the previous <code>If-None-Match</code>
        support for ETags properly formatted according to RFC 7232, section 2.3.
      </li>
    </ul>

    <p>
      There are several additions to what a server's <code>Handler</code> can do:
    </p>

    <ul>
      <li><!-- CL 31173 -->
        The <a href="/pkg/context/#Context"><code>Context</code></a>
        returned
        by <a href="/pkg/net/http/#Request.Context"><code>Request.Context</code></a>
        is canceled if the underlying <code>net.Conn</code>
        closes. For instance, if the user closes their browser in the
        middle of a slow request, the <code>Handler</code> can now
        detect that the user is gone. This complements the
        existing <a href="/pkg/net/http/#CloseNotifier"><code>CloseNotifier</code></a>
        support. This functionality requires that the underlying
        <a href="/pkg/net/#Conn"><code>net.Conn</code></a> implements
        <a href="#net">recently clarified interface documentation</a>.
      </li>

      <li><!-- CL 32479 -->
        To serve trailers produced after the header has already been written,
        see the new
        <a href="/pkg/net/http/#TrailerPrefix"><code>TrailerPrefix</code></a>
        mechanism.
      </li>

      <li><!-- CL 33099 -->
        A <code>Handler</code> can now abort a response by panicking
        with the error
        <a href="/pkg/net/http/#ErrAbortHandler"><code>ErrAbortHandler</code></a>.
      </li>

      <li><!-- CL 30812 -->
        A <code>Write</code> of zero bytes to a
        <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>
        is now defined as a
        way to test whether a <code>ResponseWriter</code> has been hijacked:
        if so, the <code>Write</code> returns
        <a href="/pkg/net/http/#ErrHijacked"><code>ErrHijacked</code></a>
        without printing an error
        to the server's error log.
      </li>

    </ul>

    <p>Client &amp; Transport changes:</p>
    <ul>
      <li><!-- CL 28930, CL 31435 -->
        The <a href="/pkg/net/http/#Client"><code>Client</code></a>
        now copies most request headers on redirect. See
        <a href="/pkg/net/http/#Client">the documentation</a>
        on the <code>Client</code> type for details.
      </li>

      <li><!-- CL 29072 -->
        The <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
        now supports international domain names. Consequently, so do
        <a href="/pkg/net/http/#Get">Get</a> and other helpers.
      </li>

      <li><!-- CL 31733, CL 29852 -->
        The <code>Client</code> now supports 301, 307, and 308 redirects.

        For example, <code>Client.Post</code> now follows 301
        redirects, converting them to <code>GET</code> requests
        without bodies, like it did for 302 and 303 redirect responses
        previously.

        The <code>Client</code> now also follows 307 and 308
        redirects, preserving the original request method and body, if
        any. If the redirect requires resending the request body, the
        request must have the new
        <a href="/pkg/net/http/#Request"><code>Request.GetBody</code></a>
        field defined.
        <a href="pkg/net/http/#NewRequest"><code>NewRequest</code></a>
        sets <code>Request.GetBody</code> automatically for common
        body types.
      </li>

      <li><!-- CL 32482 -->
        The <code>Transport</code> now rejects requests for URLs with
        ports containing non-digit characters.
      </li>

      <li><!-- CL 27117 -->
        The <code>Transport</code> will now retry non-idempotent
        requests if no bytes were written before a network failure
        and the request has no body.
      </li>

      <li><!-- CL 32481 -->
        The
        new <a href="/pkg/net/http/#Transport"><code>Transport.ProxyConnectHeader</code></a>
        allows configuration of header values to send to a proxy
        during a <code>CONNECT</code> request.
      </li>

      <li> <!-- CL 28077 -->
        The <a href="/pkg/net/http/#DefaultTransport"><code>DefaultTransport.Dialer</code></a>
        now enables <code>DualStack</code> ("<a href="https://tools.ietf.org/html/rfc6555">Happy Eyeballs</a>") support,
        allowing the use of IPv4 as a backup if it looks like IPv6 might be
        failing.
      </li>

      <li> <!-- CL 31726 -->
        The <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
        no longer reads a byte of a non-nil
        <a href="/pkg/net/http/#Request.Body"><code>Request.Body</code></a>
        when the
        <a href="/pkg/net/http/#Request.ContentLength"><code>Request.ContentLength</code></a>
        is zero to determine whether the <code>ContentLength</code>
        is actually zero or just undefined.
        To explicitly signal that a body has zero length,
        either set it to <code>nil</code>, or set it to the new value
        <a href="/pkg/net/http/#NoBody"><code>NoBody</code></a>.
        The new <code>NoBody</code> value is intended for use by <code>Request</code>
        constructor functions; it is used by
        <a href="/pkg/net/http/#NewRequest"><code>NewRequest</code></a>.
      </li>
    </ul>

  </dd>
</dl>

<dl id="net_http_httptrace"><dt><a href="/pkg/net/http/httptrace/">net/http/httptrace</a></dt>
  <dd>
    <p> <!-- CL 30359 -->
    There is now support for tracing a client request's TLS handshakes with
    the new
    <a href="/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeStart"><code>ClientTrace.TLSHandshakeStart</code></a>
    and
    <a href="/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeDone"><code>ClientTrace.TLSHandshakeDone</code></a>.
    </p>
  </dd>
</dl>

<dl id="net_http_httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt>
  <dd>
    <p> <!-- CL 32356 -->
    The <a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a>
    has a new optional hook,
    <a href="/pkg/net/http/httputil/#ReverseProxy.ModifyResponse"><code>ModifyResponse</code></a>,
    for modifying the response from the back end before proxying it to the client.
    </p>

  </dd>
</dl>

<dl id="net_mail"><dt><a href="/pkg/net/mail/">net/mail</a></dt>
  <dd>

    <p> <!-- CL 32176 -->
      Empty quoted strings are once again allowed in the name part of
      an address. That is, Go 1.4 and earlier accepted
      <code>""</code> <code>&lt;gopher@example.com&gt;</code>,
      but Go 1.5 introduced a bug that rejected this address.
      The address is recognized again.
    </p>

    <p> <!-- CL 31581 -->
      The
      <a href="/pkg/net/mail/#Header.Date"><code>Header.Date</code></a>
      method has always provided a way to parse
      the <code>Date:</code> header.
      A new function
      <a href="/pkg/net/mail/#ParseDate"><code>ParseDate</code></a>
      allows parsing dates found in other
      header lines, such as the <code>Resent-Date:</code> header.
    </p>

  </dd>
</dl>

<dl id="net_smtp"><dt><a href="/pkg/net/smtp/">net/smtp</a></dt>
  <dd>

    <p> <!-- CL 33143 -->
      If an implementation of the
      <a href="/pkg/net/smtp/#Auth"><code>Auth.Start</code></a>
      method returns an empty <code>toServer</code> value,
      the package no longer sends
      trailing whitespace in the SMTP <code>AUTH</code> command,
      which some servers rejected.
    </p>

  </dd>
</dl>

<dl id="net_url"><dt><a href="/pkg/net/url/">net/url</a></dt>
  <dd>

    <p> <!-- CL 31322 -->
      The new functions
      <a href="/pkg/net/url/#PathEscape"><code>PathEscape</code></a>
      and
      <a href="/pkg/net/url/#PathUnescape"><code>PathUnescape</code></a>
      are similar to the query escaping and unescaping functions but
      for path elements.
    </p>

    <p> <!-- CL 28933 -->
      The new methods
      <a href="/pkg/net/url/#URL.Hostname"><code>URL.Hostname</code></a>
      and
      <a href="/pkg/net/url/#URL.Port"><code>URL.Port</code></a>
      return the hostname and port fields of a URL,
      correctly handling the case where the port may not be present.
    </p>

    <p> <!-- CL 28343 -->
      The existing method
      <a href="/pkg/net/url/#URL.ResolveReference"><code>URL.ResolveReference</code></a>
      now properly handles paths with escaped bytes without losing
      the escaping.
    </p>

    <p> <!-- CL 31467 -->
      The <code>URL</code> type now implements
      <a href="/pkg/encoding/#BinaryMarshaler"><code>encoding.BinaryMarshaler</code></a> and
      <a href="/pkg/encoding/#BinaryUnmarshaler"><code>encoding.BinaryUnmarshaler</code></a>,
      making it possible to process URLs in <a href="/pkg/encoding/gob/">gob data</a>.
    </p>

    <p> <!-- CL 29610, CL 31582 -->
      Following RFC 3986,
      <a href="/pkg/net/url/#Parse"><code>Parse</code></a>
      now rejects URLs like <code>this_that:other/thing</code> instead of
      interpreting them as relative paths (<code>this_that</code> is not a valid scheme).
      To force interpretation as a relative path,
      such URLs should be prefixed with “<code>./</code>”.
      The <code>URL.String</code> method now inserts this prefix as needed.
    </p>

  </dd>
</dl>

<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
  <dd>
    <p> <!-- CL 16551 -->
      The new function
      <a href="/pkg/os/#Executable"><code>Executable</code></a> returns
      the path name of the running executable.
    </p>

    <p> <!-- CL 30614 -->
      An attempt to call a method on
      an <a href="/pkg/os/#File"><code>os.File</code></a> that has
      already been closed will now return the new error
      value <a href="/pkg/os/#ErrClosed"><code>os.ErrClosed</code></a>.
      Previously it returned a system-specific error such
      as <code>syscall.EBADF</code>.
    </p>

    <p> <!-- CL 31358 -->
      On Unix systems, <a href="/pkg/os/#Rename"><code>os.Rename</code></a>
      will now return an error when used to rename a directory to an
      existing empty directory.
      Previously it would fail when renaming to a non-empty directory
      but succeed when renaming to an empty directory.
      This makes the behavior on Unix correspond to that of other systems.
    </p>

    <p> <!-- CL 32451 -->
      On Windows, long absolute paths are now transparently converted to
      extended-length paths (paths that start with “<code>\\?\</code>”).
      This permits the package to work with files whose path names are
      longer than 260 characters.
    </p>

    <p> <!-- CL 29753 -->
      On Windows, <a href="/pkg/os/#IsExist"><code>os.IsExist</code></a>
      will now return <code>true</code> for the system
      error <code>ERROR_DIR_NOT_EMPTY</code>.
      This roughly corresponds to the existing handling of the Unix
      error <code>ENOTEMPTY</code>.
    </p>

    <p> <!-- CL 32152 -->
      On Plan 9, files that are not served by <code>#M</code> will now
      have <a href="/pkg/os/#ModeDevice"><code>ModeDevice</code></a> set in
      the value returned
      by <a href="/pkg/os/#FileInfo"><code>FileInfo.Mode</code></a>.
    </p>
  </dd>
</dl>

<dl id="path_filepath"><dt><a href="/pkg/path/filepath/">path/filepath</a></dt>
  <dd>
    <p>
      A number of bugs and corner cases on Windows were fixed:
      <a href="/pkg/path/filepath/#Abs"><code>Abs</code></a> now calls <code>Clean</code> as documented,
      <a href="/pkg/path/filepath/#Glob"><code>Glob</code></a> now matches
      “<code>\\?\c:\*</code>”,
      <a href="/pkg/path/filepath/#EvalSymlinks"><code>EvalSymlinks</code></a> now
      correctly handles “<code>C:.</code>”, and
      <a href="/pkg/path/filepath/#Clean"><code>Clean</code></a> now properly
      handles a leading “<code>..</code>” in the path.
    </p>
  </dd>
</dl>

<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  <dd>
    <p> <!-- CL 30088 -->
      The new function
      <a href="/pkg/reflect/#Swapper"><code>Swapper</code></a> was
      added to support <a href="#sortslice"><code>sort.Slice</code></a>.
    </p>
  </dd>
</dl>

<dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
  <dd>
    <p> <!-- CL 31210 -->
      The <a href="/pkg/strconv/#Unquote"><code>Unquote</code></a>
      function now strips carriage returns (<code>\r</code>) in
      backquoted raw strings, following the
      <a href="/ref/spec#String_literals">Go language semantics</a>.
    </p>
  </dd>
</dl>

<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
  <dd>
    <p> <!-- CL 25050, CL 25022 -->
      The <a href="/pkg/syscall/#Getpagesize"><code>Getpagesize</code></a>
      now returns the system's size, rather than a constant value.
      Previously it always returned 4KB.
    </p>

    <p> <!-- CL 31446 -->
      The signature
      of <a href="/pkg/syscall/#Utimes"><code>Utimes</code></a> has
      changed on Solaris to match all the other Unix systems'
      signature. Portable code should continue to use
      <a href="/pkg/os/#Chtimes"><code>os.Chtimes</code></a> instead.
    </p>

    <p> <!-- CL 32319 -->
      The <code>X__cmsg_data</code> field has been removed from
      <a href="/pkg/syscall/#Cmsghdr"><code>Cmsghdr</code></a>.
      </p>
  </dd>
</dl>

<dl id="text_template"><dt><a href="/pkg/text/template/">text/template</a></dt>
  <dd>
    <p> <!-- CL 31462 -->
      <a href="/pkg/text/template/#Template.Execute"><code>Template.Execute</code></a>
      can now take a
      <a href="/pkg/reflect/#Value"><code>reflect.Value</code></a> as its data
      argument, and
      <a href="/pkg/text/template/#FuncMap"><code>FuncMap</code></a>
      functions can also accept and return <code>reflect.Value</code>.
    </p>

  </dd>
</dl>

<dl id="time"><dt><a href="/pkg/time/">time</a></dt>
  <dd>

    <p> <!-- CL 20118 --> The new function
      <a href="/pkg/time/#Until"><code>Until</code></a> complements
      the analogous <code>Since</code> function.
    </p>

    <p> <!-- CL 29338 -->
      <a href="/pkg/time/#ParseDuration"><code>ParseDuration</code></a>
      now accepts long fractional parts.
    </p>

    <p> <!-- CL 33429 -->
      <a href="/pkg/time/#Parse"><code>Parse</code></a>
      now rejects dates before the start of a month, such as June 0;
      it already rejected dates beyond the end of the month, such as
      June 31 and July 32.
    </p>

    <p> <!-- CL 33029 -->
      The <code>tzdata</code> database has been updated to version
      2016i for systems that don't already have a local time zone
      database.
    </p>

    <p>
  </dd>
</dl>

<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
  <dd>
    <p><!-- CL 29970 -->
      The new method
      <a href="/pkg/testing/#T.Name"><code>T.Name</code></a>
      (and <code>B.Name</code>) returns the name of the current
      test or benchmark.
    </p>

    <p><!-- CL 32483 -->
      The new function
      <a href="/pkg/testing/#CoverMode"><code>CoverMode</code></a>
      reports the test coverage mode.
    </p>

    <p><!-- CL 32615 -->
      Tests and benchmarks are now marked as failed if the race
      detector is enabled and a data race occurs during execution.
      Previously, individual test cases would appear to pass,
      and only the overall execution of the test binary would fail.
    </p>

  </dd>
</dl>

<dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
  <dd>
    <p><!-- CL 30935 -->
      <a href="/pkg/unicode/#SimpleFold"><code>SimpleFold</code></a>
      now returns its argument unchanged if the provided input was an invalid rune.
      Previously, the implementation failed with an index bounds check panic.
    </p>
  </dd>
</dl>
