"Fossies" - the Fresh Open Source Software Archive

Member "go/doc/go1.8.html" (9 Sep 2020, 59021 Bytes) of package /windows/misc/go1.14.9.windows-386.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) HTML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 <!--{
    2     "Title": "Go 1.8 Release Notes",
    3     "Path":  "/doc/go1.8",
    4     "Template": true
    5 }-->
    6 
    7 <!--
    8 NOTE: In this document and others in this directory, the convention is to
    9 set fixed-width phrases with non-fixed-width spaces, as in
   10 <code>hello</code> <code>world</code>.
   11 Do not send CLs removing the interior tags from such phrases.
   12 -->
   13 
   14 <style>
   15   main ul li { margin: 0.5em 0; }
   16 </style>
   17 
   18 <h2 id="introduction">Introduction to Go 1.8</h2>
   19 
   20 <p>
   21 The latest Go release, version 1.8, arrives six months after <a href="go1.7">Go 1.7</a>.
   22 Most of its changes are in the implementation of the toolchain, runtime, and libraries.
   23 There are <a href="#language">two minor changes</a> to the language specification.
   24 As always, the release maintains the Go 1 <a href="/doc/go1compat.html">promise of compatibility</a>.
   25 We expect almost all Go programs to continue to compile and run as before.
   26 </p>
   27 
   28 <p>
   29 The release <a href="#ports">adds support for 32-bit MIPS</a>,
   30 <a href="#compiler">updates the compiler back end</a> to generate more efficient code,
   31 <a href="#gc">reduces GC pauses</a> by eliminating stop-the-world stack rescanning,
   32 <a href="#h2push">adds HTTP/2 Push support</a>,
   33 <a href="#http_shutdown">adds HTTP graceful shutdown</a>,
   34 <a href="#more_context">adds more context support</a>,
   35 <a href="#mutex_prof">enables profiling mutexes</a>,
   36 and <a href="#sort_slice">simplifies sorting slices</a>.
   37 </p>
   38 
   39 <h2 id="language">Changes to the language</h2>
   40 
   41 <p>
   42   When explicitly converting a value from one struct type to another,
   43   as of Go 1.8 the tags are ignored. Thus two structs that differ
   44   only in their tags may be converted from one to the other:
   45 </p>
   46 
   47 <pre>
   48 func example() {
   49     type T1 struct {
   50         X int `json:"foo"`
   51     }
   52     type T2 struct {
   53         X int `json:"bar"`
   54     }
   55     var v1 T1
   56     var v2 T2
   57     v1 = T1(v2) // now legal
   58 }
   59 </pre>
   60 
   61 
   62 <p> <!-- CL 17711 -->
   63   The language specification now only requires that implementations
   64   support up to 16-bit exponents in floating-point constants.  This does not affect
   65   either the “<a href="/cmd/compile/"><code>gc</code></a>” or
   66   <code>gccgo</code> compilers, both of
   67   which still support 32-bit exponents.
   68 </p>
   69 
   70 <h2 id="ports">Ports</h2>
   71 
   72 <p>
   73 Go now supports 32-bit MIPS on Linux for both big-endian
   74 (<code>linux/mips</code>) and little-endian machines
   75 (<code>linux/mipsle</code>) that implement the MIPS32r1 instruction set with FPU
   76 or kernel FPU emulation. Note that many common MIPS-based routers lack an FPU and
   77 have firmware that doesn't enable kernel FPU emulation; Go won't run on such machines.
   78 </p>
   79 
   80 <p>
   81 On DragonFly BSD, Go now requires DragonFly 4.4.4 or later. <!-- CL 29491, CL 29971 -->
   82 </p>
   83 
   84 <p>
   85 On OpenBSD, Go now requires OpenBSD 5.9 or later. <!-- CL 34093 -->
   86 </p>
   87 
   88 <p>
   89 The Plan 9 port's networking support is now much more complete
   90 and matches the behavior of Unix and Windows with respect to deadlines
   91 and cancelation. For Plan 9 kernel requirements, see the
   92 <a href="https://golang.org/wiki/Plan9">Plan 9 wiki page</a>.
   93 </p>
   94 
   95 <p>
   96   Go 1.8 now only supports OS X 10.8 or later. This is likely the last
   97   Go release to support 10.8. Compiling Go or running
   98   binaries on older OS X versions is untested.
   99 </p>
  100 
  101 <p>
  102   Go 1.8 will be the last release to support Linux on ARMv5E and ARMv6 processors:
  103   Go 1.9 will likely require the ARMv6K (as found in the Raspberry Pi 1) or later.
  104   To identify whether a Linux system is ARMv6K or later, run
  105 <code>go</code> <code>tool</code> <code>dist</code> <code>-check-armv6k</code>
  106   (to facilitate testing, it is also possible to just copy the <code>dist</code> command to the
  107   system without installing a full copy of Go 1.8)
  108   and if the program terminates with output "ARMv6K supported." then the system
  109   implements ARMv6K or later.
  110   Go on non-Linux ARM systems already requires ARMv6K or later.
  111 </p>
  112 
  113 
  114 <h3 id="known_issues">Known Issues</h3>
  115 
  116 <p>
  117 There are some instabilities on FreeBSD and NetBSD that are known but not understood.
  118 These can lead to program crashes in rare cases.
  119 See
  120 <a href="https://golang.org/issue/15658">issue 15658</a> and
  121 <a href="https://golang.org/issue/16511">issue 16511</a>.
  122 Any help in solving these issues would be appreciated.
  123 </p>
  124 
  125 <h2 id="tools">Tools</h2>
  126 
  127 <h3 id="cmd_asm">Assembler</h3>
  128 
  129 <p>
  130 For 64-bit x86 systems, the following instructions have been added:
  131 <code>VBROADCASTSD</code>,
  132 <code>BROADCASTSS</code>,
  133 <code>MOVDDUP</code>,
  134 <code>MOVSHDUP</code>,
  135 <code>MOVSLDUP</code>,
  136 <code>VMOVDDUP</code>,
  137 <code>VMOVSHDUP</code>, and
  138 <code>VMOVSLDUP</code>.
  139 </p>
  140 
  141 <p>
  142 For 64-bit PPC systems, the common vector scalar instructions have been
  143 added:
  144 <code>LXS</code>,
  145 <code>LXSDX</code>,
  146 <code>LXSI</code>,
  147 <code>LXSIWAX</code>,
  148 <code>LXSIWZX</code>,
  149 <code>LXV</code>,
  150 <code>LXVD2X</code>,
  151 <code>LXVDSX</code>,
  152 <code>LXVW4X</code>,
  153 <code>MFVSR</code>,
  154 <code>MFVSRD</code>,
  155 <code>MFVSRWZ</code>,
  156 <code>MTVSR</code>,
  157 <code>MTVSRD</code>,
  158 <code>MTVSRWA</code>,
  159 <code>MTVSRWZ</code>,
  160 <code>STXS</code>,
  161 <code>STXSDX</code>,
  162 <code>STXSI</code>,
  163 <code>STXSIWX</code>,
  164 <code>STXV</code>,
  165 <code>STXVD2X</code>,
  166 <code>STXVW4X</code>,
  167 <code>XSCV</code>,
  168 <code>XSCVDPSP</code>,
  169 <code>XSCVDPSPN</code>,
  170 <code>XSCVDPSXDS</code>,
  171 <code>XSCVDPSXWS</code>,
  172 <code>XSCVDPUXDS</code>,
  173 <code>XSCVDPUXWS</code>,
  174 <code>XSCVSPDP</code>,
  175 <code>XSCVSPDPN</code>,
  176 <code>XSCVSXDDP</code>,
  177 <code>XSCVSXDSP</code>,
  178 <code>XSCVUXDDP</code>,
  179 <code>XSCVUXDSP</code>,
  180 <code>XSCVX</code>,
  181 <code>XSCVXP</code>,
  182 <code>XVCV</code>,
  183 <code>XVCVDPSP</code>,
  184 <code>XVCVDPSXDS</code>,
  185 <code>XVCVDPSXWS</code>,
  186 <code>XVCVDPUXDS</code>,
  187 <code>XVCVDPUXWS</code>,
  188 <code>XVCVSPDP</code>,
  189 <code>XVCVSPSXDS</code>,
  190 <code>XVCVSPSXWS</code>,
  191 <code>XVCVSPUXDS</code>,
  192 <code>XVCVSPUXWS</code>,
  193 <code>XVCVSXDDP</code>,
  194 <code>XVCVSXDSP</code>,
  195 <code>XVCVSXWDP</code>,
  196 <code>XVCVSXWSP</code>,
  197 <code>XVCVUXDDP</code>,
  198 <code>XVCVUXDSP</code>,
  199 <code>XVCVUXWDP</code>,
  200 <code>XVCVUXWSP</code>,
  201 <code>XVCVX</code>,
  202 <code>XVCVXP</code>,
  203 <code>XXLAND</code>,
  204 <code>XXLANDC</code>,
  205 <code>XXLANDQ</code>,
  206 <code>XXLEQV</code>,
  207 <code>XXLNAND</code>,
  208 <code>XXLNOR</code>,
  209 <code>XXLOR</code>,
  210 <code>XXLORC</code>,
  211 <code>XXLORQ</code>,
  212 <code>XXLXOR</code>,
  213 <code>XXMRG</code>,
  214 <code>XXMRGHW</code>,
  215 <code>XXMRGLW</code>,
  216 <code>XXPERM</code>,
  217 <code>XXPERMDI</code>,
  218 <code>XXSEL</code>,
  219 <code>XXSI</code>,
  220 <code>XXSLDWI</code>,
  221 <code>XXSPLT</code>, and
  222 <code>XXSPLTW</code>.
  223 </p>
  224 
  225 <h3 id="tool_yacc">Yacc</h3>
  226 
  227 <p> <!-- CL 27324, CL 27325 -->
  228 The <code>yacc</code> tool (previously available by running
  229 <code>go</code> <code>tool</code> <code>yacc</code>”) has been removed.
  230 As of Go 1.7 it was no longer used by the Go compiler.
  231 It has moved to the “tools” repository and is now available at
  232 <code><a href="https://godoc.org/golang.org/x/tools/cmd/goyacc">golang.org/x/tools/cmd/goyacc</a></code>.
  233 </p>
  234 
  235 <h3 id="tool_fix">Fix</h3>
  236 
  237 <p> <!-- CL 28872 -->
  238   The <code>fix</code> tool has a new “<code>context</code>
  239   fix to change imports from “<code>golang.org/x/net/context</code>
  240   to “<a href="/pkg/context/"><code>context</code></a>”.
  241 </p>
  242 
  243 <h3 id="tool_pprof">Pprof</h3>
  244 
  245 <p> <!-- CL 33157 -->
  246   The <code>pprof</code> tool can now profile TLS servers
  247   and skip certificate validation by using the “<code>https+insecure</code>
  248   URL scheme.
  249 </p>
  250 
  251 <p> <!-- CL 23781 -->
  252   The callgrind output now has instruction-level granularity.
  253 </p>
  254 
  255 <h3 id="tool_trace">Trace</h3>
  256 
  257 <p> <!-- CL 23324 -->
  258   The <code>trace</code> tool has a new <code>-pprof</code> flag for
  259   producing pprof-compatible blocking and latency profiles from an
  260   execution trace.
  261 </p>
  262 
  263 <p> <!-- CL 30017, CL 30702 -->
  264   Garbage collection events are now shown more clearly in the
  265   execution trace viewer. Garbage collection activity is shown on its
  266   own row and GC helper goroutines are annotated with their roles.
  267 </p>
  268 
  269 <h3 id="tool_vet">Vet</h3>
  270 
  271 <p>Vet is stricter in some ways and looser where it
  272   previously caused false positives.</p>
  273 
  274 <p>Vet now checks for copying an array of locks,
  275   duplicate JSON and XML struct field tags,
  276   non-space-separated struct tags,
  277   deferred calls to HTTP <code>Response.Body.Close</code>
  278   before checking errors, and
  279   indexed arguments in <code>Printf</code>.
  280   It also improves existing checks.</p>
  281 </p>
  282 
  283 <h3 id="compiler">Compiler Toolchain</h3>
  284 
  285 <p>
  286 Go 1.7 introduced a new compiler back end for 64-bit x86 systems.
  287 In Go 1.8, that back end has been developed further and is now used for
  288 all architectures.
  289 </p>
  290 
  291 <p>
  292 The new back end, based on
  293 <a href="https://en.wikipedia.org/wiki/Static_single_assignment_form">static single assignment form</a> (SSA),
  294 generates more compact, more efficient code
  295 and provides a better platform for optimizations
  296 such as bounds check elimination.
  297 The new back end reduces the CPU time required by
  298 <a href="https://golang.org/test/bench/go1/">our benchmark programs</a> by 20-30%
  299 on 32-bit ARM systems. For 64-bit x86 systems, which already used the SSA back end in
  300 Go 1.7, the gains are a more modest 0-10%. Other architectures will likely
  301 see improvements closer to the 32-bit ARM numbers.
  302 </p>
  303 
  304 <p>
  305   The temporary <code>-ssa=0</code> compiler flag introduced in Go 1.7
  306   to disable the new back end has been removed in Go 1.8.
  307 </p>
  308 
  309 <p>
  310   In addition to enabling the new compiler back end for all systems,
  311   Go 1.8 also introduces a new compiler front end. The new compiler
  312   front end should not be noticeable to users but is the foundation for
  313   future performance work.
  314 </p>
  315 
  316 <p>
  317   The compiler and linker have been optimized and run faster in this
  318   release than in Go 1.7, although they are still slower than we would
  319   like and will continue to be optimized in future releases.
  320   Compared to the previous release, Go 1.8 is
  321   <a href="https://dave.cheney.net/2016/11/19/go-1-8-toolchain-improvements">about 15% faster</a>.
  322 </p>
  323 
  324 <h3 id="cmd_cgo">Cgo</h3>
  325 
  326 <p> <!-- CL 31141 -->
  327 The Go tool now remembers the value of the <code>CGO_ENABLED</code> environment
  328 variable set during <code>make.bash</code> and applies it to all future compilations
  329 by default to fix issue <a href="https://golang.org/issue/12808">#12808</a>.
  330 When doing native compilation, it is rarely necessary to explicitly set
  331 the <code>CGO_ENABLED</code> environment variable as <code>make.bash</code>
  332 will detect the correct setting automatically. The main reason to explicitly
  333 set the <code>CGO_ENABLED</code> environment variable is when your environment
  334 supports cgo, but you explicitly do not want cgo support, in which case, set
  335 <code>CGO_ENABLED=0</code> during <code>make.bash</code> or <code>all.bash</code>.
  336 </p>
  337 
  338 <p> <!-- CL 29991 -->
  339 The environment variable <code>PKG_CONFIG</code> may now be used to
  340 set the program to run to handle <code>#cgo</code> <code>pkg-config</code>
  341 directives.  The default is <code>pkg-config</code>, the program
  342 always used by earlier releases.  This is intended to make it easier
  343 to cross-compile
  344 <a href="/cmd/cgo/">cgo</a> code.
  345 </p>
  346 
  347 <p> <!-- CL 32354 -->
  348 The <a href="/cmd/cgo/">cgo</a> tool now supports a <code>-srcdir</code>
  349 option, which is used by the <a href="/cmd/go/">go</a> command.
  350 </p>
  351 
  352 <p> <!-- CL 31768, 31811 -->
  353 If <a href="/cmd/cgo/">cgo</a> code calls <code>C.malloc</code>, and
  354 <code>malloc</code> returns <code>NULL</code>, the program will now
  355 crash with an out of memory error.
  356 <code>C.malloc</code> will never return <code>nil</code>.
  357 Unlike most C functions, <code>C.malloc</code> may not be used in a
  358 two-result form returning an errno value.
  359 </p>
  360 
  361 <p> <!-- CL 33237 -->
  362 If <a href="/cmd/cgo/">cgo</a> is used to call a C function passing a
  363 pointer to a C union, and if the C union can contain any pointer
  364 values, and if <a href="/cmd/cgo/#hdr-Passing_pointers">cgo pointer
  365 checking</a> is enabled (as it is by default), the union value is now
  366 checked for Go pointers.
  367 </p>
  368 
  369 <h3 id="gccgo">Gccgo</h3>
  370 
  371 <p>
  372 Due to the alignment of Go's semiannual release schedule with GCC's
  373 annual release schedule,
  374 GCC release 6 contains the Go 1.6.1 version of gccgo.
  375 We expect that the next release, GCC 7, will contain the Go 1.8
  376 version of gccgo.
  377 </p>
  378 
  379 <h3 id="gopath">Default GOPATH</h3>
  380 
  381 <p>
  382   The
  383   <a href="/cmd/go/#hdr-GOPATH_environment_variable"><code>GOPATH</code>
  384   environment variable</a> now has a default value if it
  385   is unset. It defaults to
  386   <code>$HOME/go</code> on Unix and
  387   <code>%USERPROFILE%/go</code> on Windows.
  388 </p>
  389 
  390 <h3 id="go_get">Go get</h3>
  391 
  392 <p> <!-- CL 34818 -->
  393   The “<code>go</code> <code>get</code>” command now always respects
  394   HTTP proxy environment variables, regardless of whether
  395   the <code style='white-space:nowrap'>-insecure</code> flag is used. In previous releases, the
  396   <code style='white-space:nowrap'>-insecure</code> flag had the side effect of not using proxies.
  397 </p>
  398 
  399 <h3 id="go_bug">Go bug</h3>
  400 
  401 <p>
  402   The new
  403 <a href="/cmd/go/#hdr-Print_information_for_bug_reports"><code>go</code> <code>bug</code></a>
  404   command starts a bug report on GitHub, prefilled
  405   with information about the current system.
  406 </p>
  407 
  408 <h3 id="cmd_doc">Go doc</h3>
  409 
  410 <p> <!-- CL 25419 -->
  411   The
  412 <a href="/cmd/go/#hdr-Show_documentation_for_package_or_symbol"><code>go</code> <code>doc</code></a>
  413   command now groups constants and variables with their type,
  414   following the behavior of
  415   <a href="/cmd/godoc/"><code>godoc</code></a>.
  416 </p>
  417 
  418 <p> <!-- CL 25420 -->
  419   In order to improve the readability of <code>doc</code>'s
  420   output, each summary of the first-level items is guaranteed to
  421   occupy a single line.
  422 </p>
  423 
  424 <p> <!-- CL 31852 -->
  425   Documentation for a specific method in an interface definition can
  426   now be requested, as in
  427 <code>go</code> <code>doc</code> <code>net.Conn.SetDeadline</code>”.
  428 </p>
  429 
  430 <h3 id="plugin">Plugins</h3>
  431 
  432 <p>
  433   Go now provides early support for plugins with a “<code>plugin</code>
  434   build mode for generating plugins written in Go, and a
  435   new <a href="/pkg/plugin/"><code>plugin</code></a> package for
  436   loading such plugins at run time. Plugin support is currently only
  437   available on Linux. Please report any issues.
  438 </p>
  439 
  440 <h2 id="runtime">Runtime</h2>
  441 
  442 <h3 id="liveness">Argument Liveness</h3>
  443 
  444 <p>
  445   <!-- Issue 15843 --> The garbage collector no longer considers
  446   arguments live throughout the entirety of a function. For more
  447   information, and for how to force a variable to remain live, see
  448   the <a href="/pkg/runtime/#KeepAlive"><code>runtime.KeepAlive</code></a>
  449   function added in Go 1.7.
  450 </p>
  451 
  452 <p>
  453   <i>Updating:</i>
  454   Code that sets a finalizer on an allocated object may need to add
  455   calls to <code>runtime.KeepAlive</code> in functions or methods
  456   using that object.
  457   Read the
  458   <a href="/pkg/runtime/#KeepAlive"><code>KeepAlive</code>
  459   documentation</a> and its example for more details.
  460 </p>
  461 
  462 <h3 id="mapiter">Concurrent Map Misuse</h3>
  463 
  464 <p>
  465 In Go 1.6, the runtime
  466 <a href="/doc/go1.6#runtime">added lightweight,
  467 best-effort detection of concurrent misuse of maps</a>. This release
  468 improves that detector with support for detecting programs that
  469 concurrently write to and iterate over a map.
  470 </p>
  471 <p>
  472 As always, if one goroutine is writing to a map, no other goroutine should be
  473 reading (which includes iterating) or writing the map concurrently.
  474 If the runtime detects this condition, it prints a diagnosis and crashes the program.
  475 The best way to find out more about the problem is to run the program
  476 under the
  477 <a href="https://blog.golang.org/race-detector">race detector</a>,
  478 which will more reliably identify the race
  479 and give more detail.
  480 </p>
  481 
  482 <h3 id="memstats">MemStats Documentation</h3>
  483 
  484 <p> <!-- CL 28972 -->
  485   The <a href="/pkg/runtime/#MemStats"><code>runtime.MemStats</code></a>
  486   type has been more thoroughly documented.
  487 </p>
  488 
  489 <h2 id="performance">Performance</h2>
  490 
  491 <p>
  492 As always, the changes are so general and varied that precise statements
  493 about performance are difficult to make.
  494 Most programs should run a bit faster,
  495 due to speedups in the garbage collector and
  496 optimizations in the standard library.
  497 </p>
  498 
  499 <p>
  500 There have been optimizations to implementations in the
  501 <a href="/pkg/bytes/"><code>bytes</code></a>,
  502 <a href="/pkg/crypto/aes/"><code>crypto/aes</code></a>,
  503 <a href="/pkg/crypto/cipher/"><code>crypto/cipher</code></a>,
  504 <a href="/pkg/crypto/elliptic/"><code>crypto/elliptic</code></a>,
  505 <a href="/pkg/crypto/sha256/"><code>crypto/sha256</code></a>,
  506 <a href="/pkg/crypto/sha512/"><code>crypto/sha512</code></a>,
  507 <a href="/pkg/encoding/asn1/"><code>encoding/asn1</code></a>,
  508 <a href="/pkg/encoding/csv/"><code>encoding/csv</code></a>,
  509 <a href="/pkg/encoding/hex/"><code>encoding/hex</code></a>,
  510 <a href="/pkg/encoding/json/"><code>encoding/json</code></a>,
  511 <a href="/pkg/hash/crc32/"><code>hash/crc32</code></a>,
  512 <a href="/pkg/image/color/"><code>image/color</code></a>,
  513 <a href="/pkg/image/draw/"><code>image/draw</code></a>,
  514 <a href="/pkg/math/"><code>math</code></a>,
  515 <a href="/pkg/math/big/"><code>math/big</code></a>,
  516 <a href="/pkg/reflect/"><code>reflect</code></a>,
  517 <a href="/pkg/regexp/"><code>regexp</code></a>,
  518 <a href="/pkg/runtime/"><code>runtime</code></a>,
  519 <a href="/pkg/strconv/"><code>strconv</code></a>,
  520 <a href="/pkg/strings/"><code>strings</code></a>,
  521 <a href="/pkg/syscall/"><code>syscall</code></a>,
  522 <a href="/pkg/text/template/"><code>text/template</code></a>, and
  523 <a href="/pkg/unicode/utf8/"><code>unicode/utf8</code></a>
  524 packages.
  525 </p>
  526 
  527 <h3 id="gc">Garbage Collector</h3>
  528 
  529 <p>
  530   Garbage collection pauses should be significantly shorter than they
  531   were in Go 1.7, usually under 100 microseconds and often as low as
  532   10 microseconds.
  533   See the
  534   <a href="https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md"
  535      >document on eliminating stop-the-world stack re-scanning</a>
  536   for details.  More work remains for Go 1.9.
  537 </p>
  538 
  539 <h3 id="defer">Defer</h3>
  540 
  541 <!-- CL 29656, CL 29656 -->
  542 <p>
  543   The overhead of <a href="/ref/spec/#Defer_statements">deferred
  544   function calls</a> has been reduced by about half.
  545 </p>
  546 
  547 <h3 id="cgoperf">Cgo</h3>
  548 
  549 <p>The overhead of calls from Go into C has been reduced by about half.</p>
  550 
  551 <h2 id="library">Standard library</h2>
  552 
  553 <h3 id="examples">Examples</h3>
  554 
  555 <p>
  556 Examples have been added to the documentation across many packages.
  557 </p>
  558 
  559 <h3 id="sort_slice">Sort</h3>
  560 
  561 <p>
  562 The <a href="/pkg/sort/">sort</a> package
  563 now includes a convenience function
  564 <a href="/pkg/sort/#Slice"><code>Slice</code></a> to sort a
  565 slice given a <em>less</em> function.
  566 
  567 In many cases this means that writing a new sorter type is not
  568 necessary.
  569 </p>
  570 
  571 <p>
  572 Also new are
  573 <a href="/pkg/sort/#SliceStable"><code>SliceStable</code></a> and
  574 <a href="/pkg/sort/#SliceIsSorted"><code>SliceIsSorted</code></a>.
  575 </p>
  576 
  577 <h3 id="h2push">HTTP/2 Push</h3>
  578 
  579 <p>
  580 The <a href="/pkg/net/http/">net/http</a> package now includes a
  581 mechanism to
  582 send HTTP/2 server pushes from a
  583 <a href="/pkg/net/http/#Handler"><code>Handler</code></a>.
  584 Similar to the existing <code>Flusher</code> and <code>Hijacker</code>
  585 interfaces, an HTTP/2
  586 <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>
  587 now implements the new
  588 <a href="/pkg/net/http/#Pusher"><code>Pusher</code></a> interface.
  589 </p>
  590 
  591 <h3 id="http_shutdown">HTTP Server Graceful Shutdown</h3>
  592 
  593 <p> <!-- CL 32329 -->
  594   The HTTP Server now has support for graceful shutdown using the new
  595   <a href="/pkg/net/http/#Server.Shutdown"><code>Server.Shutdown</code></a>
  596   method and abrupt shutdown using the new
  597   <a href="/pkg/net/http/#Server.Close"><code>Server.Close</code></a>
  598   method.
  599 </p>
  600 
  601 <h3 id="more_context">More Context Support</h3>
  602 
  603 <p>
  604   Continuing <a href="/doc/go1.7#context">Go 1.7's adoption</a>
  605   of <a href="/pkg/context/#Context"><code>context.Context</code></a>
  606   into the standard library, Go 1.8 adds more context support
  607   to existing packages:
  608 </p>
  609 
  610 <ul>
  611   <li>The new <a href="/pkg/net/http/#Server.Shutdown"><code>Server.Shutdown</code></a>
  612     takes a context argument.</li>
  613   <li>There have been <a href="#database_sql">significant additions</a> to the
  614     <a href="/pkg/database/sql/">database/sql</a> package with context support.</li>
  615   <li>All nine of the new <code>Lookup</code> methods on the new
  616     <a href="/pkg/net/#Resolver"><code>net.Resolver</code></a> now
  617     take a context.</li>
  618   </ul>
  619 
  620 <h3 id="mutex_prof">Mutex Contention Profiling</h3>
  621 
  622 <p>
  623   The runtime and tools now support profiling contended mutexes.
  624 </p>
  625 
  626 <p>
  627   Most users will want to use the new <code>-mutexprofile</code>
  628   flag with “<a href="/cmd/go/#hdr-Description_of_testing_flags"><code>go</code> <code>test</code></a>”,
  629   and then use <a href="/cmd/pprof/">pprof</a> on the resultant file.
  630 </p>
  631 
  632 <p>
  633   Lower-level support is also available via the new
  634   <a href="/pkg/runtime/#MutexProfile"><code>MutexProfile</code></a>
  635   and
  636   <a href="/pkg/runtime/#SetMutexProfileFraction"><code>SetMutexProfileFraction</code></a>.
  637 </p>
  638 
  639 <p>
  640   A known limitation for Go 1.8 is that the profile only reports contention for
  641   <a href="/pkg/sync/#Mutex"><code>sync.Mutex</code></a>,
  642   not 
  643   <a href="/pkg/sync/#RWMutex"><code>sync.RWMutex</code></a>.
  644 </p>
  645 
  646 <h3 id="minor_library_changes">Minor changes to the library</h3>
  647 
  648 <p>
  649 As always, there are various minor changes and updates to the library,
  650 made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a>
  651 in mind. The following sections list the user visible changes and additions.
  652 Optimizations and minor bug fixes are not listed.
  653 </p>
  654 
  655 <dl id="archive_tar"><dt><a href="/pkg/archive/tar/">archive/tar</a></dt>
  656   <dd>
  657 
  658     <p> <!-- CL 28471, CL 31440, CL 31441, CL 31444, CL 28418, CL 31439 -->
  659       The tar implementation corrects many bugs in corner cases of the file format.
  660       The <a href="/pkg/archive/tar/#Reader"><code>Reader</code></a>
  661       is now able to process tar files in the PAX format with entries larger than 8GB.
  662       The <a href="/pkg/archive/tar/#Writer"><code>Writer</code></a>
  663       no longer produces invalid tar files in some situations involving long pathnames.
  664     </p>
  665 
  666   </dd>
  667 </dl>
  668 
  669 <dl id="compress_flate"><dt><a href="/pkg/compress/flate/">compress/flate</a></dt>
  670   <dd>
  671 
  672     <p> <!-- CL 31640, CL 31174, CL 32149 -->
  673       There have been some minor fixes to the encoder to improve the
  674       compression ratio in certain situations. As a result, the exact
  675       encoded output of <code>DEFLATE</code> may be different from Go 1.7. Since
  676       <code>DEFLATE</code> is the underlying compression of gzip, png, zlib, and zip,
  677       those formats may have changed outputs.
  678     </p>
  679 
  680     <p> <!-- CL 31174 -->
  681       The encoder, when operating in
  682       <a href="/pkg/compress/flate/#NoCompression"><code>NoCompression</code></a>
  683       mode, now produces a consistent output that is not dependent on
  684       the size of the slices passed to the
  685       <a href="/pkg/compress/flate/#Writer.Write"><code>Write</code></a>
  686       method.
  687     </p>
  688 
  689     <p> <!-- CL 28216 -->
  690       The decoder, upon encountering an error, now returns any
  691       buffered data it had uncompressed along with the error.
  692     </p>
  693 
  694   </dd>
  695 </dl>
  696 
  697 
  698 <dl id="compress_gzip"><dt><a href="/pkg/compress/gzip/">compress/gzip</a></dt>
  699   <dd>
  700 
  701     <p>
  702       The <a href="/pkg/compress/gzip/#Writer"><code>Writer</code></a>
  703       now encodes a zero <code>MTIME</code> field when
  704       the <a href="/pkg/compress/gzip/#Header"><code>Header.ModTime</code></a>
  705       field is the zero value.
  706 
  707       In previous releases of Go, the <code>Writer</code> would encode
  708       a nonsensical value.
  709 
  710       Similarly,
  711       the <a href="/pkg/compress/gzip/#Reader"><code>Reader</code></a>
  712       now reports a zero encoded <code>MTIME</code> field as a zero
  713       <code>Header.ModTime</code>.
  714     </p>
  715 
  716   </dd>
  717 </dl>
  718 
  719 <dl id="context"><dt><a href="/pkg/context/">context</a></dt>
  720   <dd>
  721     <p> <!-- CL 30370 -->
  722       The <a href="/pkg/context#DeadlineExceeded"><code>DeadlineExceeded</code></a>
  723       error now implements
  724       <a href="/pkg/net/#Error"><code>net.Error</code></a>
  725       and reports true for both the <code>Timeout</code> and
  726       <code>Temporary</code> methods.
  727     </p>
  728   </dd>
  729 </dl>
  730 
  731 <dl id="crypto_tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
  732   <dd>
  733     <p> <!-- CL 25159, CL 31318 -->
  734       The new method
  735       <a href="/pkg/crypto/tls/#Conn.CloseWrite"><code>Conn.CloseWrite</code></a>
  736       allows TLS connections to be half closed.
  737     </p>
  738 
  739     <p> <!-- CL 28075 -->
  740       The new method
  741       <a href="/pkg/crypto/tls/#Config.Clone"><code>Config.Clone</code></a>
  742       clones a TLS configuration.
  743     </p>
  744 
  745     <p>
  746       <!-- CL 30790 -->
  747       The new <a href="/pkg/crypto/tls/#Config.GetConfigForClient"><code>Config.GetConfigForClient</code></a>
  748       callback allows selecting a configuration for a client dynamically, based
  749       on the client's
  750       <a href="/pkg/crypto/tls/#ClientHelloInfo"><code>ClientHelloInfo</code></a>.
  751 
  752       <!-- CL 31391, CL 32119 -->
  753       The <a href="/pkg/crypto/tls/#ClientHelloInfo"><code>ClientHelloInfo</code></a>
  754       struct now has new
  755       fields <code>Conn</code>, <code>SignatureSchemes</code> (using
  756       the new
  757       type <a href="/kg/crypto/tls/#SignatureScheme"><code>SignatureScheme</code></a>),
  758       <code>SupportedProtos</code>, and <code>SupportedVersions</code>.
  759     </p>
  760 
  761     <p> <!-- CL 32115 -->
  762       The new <a href="/pkg/crypto/tls/#Config.GetClientCertificate"><code>Config.GetClientCertificate</code></a>
  763       callback allows selecting a client certificate based on the server's
  764       TLS <code>CertificateRequest</code> message, represented by the new
  765       <a href="/pkg/crypto/tls/#CertificateRequestInfo"><code>CertificateRequestInfo</code></a>.
  766     </p>
  767 
  768     <p> <!-- CL 27434 -->
  769       The new
  770       <a href="/pkg/crypto/tls/#Config.KeyLogWriter"><code>Config.KeyLogWriter</code></a>
  771       allows debugging TLS connections
  772       in <a href="https://www.wireshark.org/">WireShark</a> and
  773       similar tools.
  774     </p>
  775 
  776     <p> <!-- CL 32115 -->
  777       The new
  778       <a href="/pkg/crypto/tls/#Config.VerifyPeerCertificate"><code>Config.VerifyPeerCertificate</code></a>
  779       callback allows additional validation of a peer's presented certificate.
  780     </p>
  781 
  782     <p> <!-- CL 18130 -->
  783       The <code>crypto/tls</code> package now implements basic
  784       countermeasures against CBC padding oracles. There should be
  785       no explicit secret-dependent timings, but it does not attempt to
  786       normalize memory accesses to prevent cache timing leaks.
  787     </p>
  788 
  789     <p>
  790       The <code>crypto/tls</code> package now supports
  791       X25519 and <!-- CL 30824, CL 30825 -->
  792       ChaCha20-Poly1305.  <!-- CL 30957, CL 30958 -->
  793       ChaCha20-Poly1305 is now prioritized unless <!-- CL 32871 -->
  794       hardware support for AES-GCM is present.
  795     </p>
  796 
  797     <p> <!-- CL 27315, CL 35290 -->
  798       AES-128-CBC cipher suites with SHA-256 are also
  799       now supported, but disabled by default.
  800     </p>
  801 
  802   </dd>
  803 </dl>
  804 
  805 <dl id="crypto_x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
  806   <dd>
  807     <p> <!-- CL 24743 -->
  808       PSS signatures are now supported.
  809     </p>
  810 
  811     <p> <!-- CL 32644 -->
  812       <a href="/pkg/crypto/x509/#UnknownAuthorityError"><code>UnknownAuthorityError</code></a>
  813       now has a <code>Cert</code> field, reporting the untrusted
  814       certificate.
  815     </p>
  816 
  817     <p>
  818       Certificate validation is more permissive in a few cases and
  819       stricter in a few other cases.
  820     <!--
  821 crypto/x509: allow a leaf certificate to be specified directly as root (CL 27393)
  822 crypto/x509: check that the issuer name matches the issuer's subject name (CL 23571)
  823 crypto/x509: don't accept a root that already appears in a chain. (CL 32121)
  824 crypto/x509: fix name constraints handling (CL 30155)
  825 crypto/x509: parse all names in an RDN (CL 30810)
  826 crypto/x509: recognise ISO OID for RSA+SHA1 (CL 27394)
  827 crypto/x509: require a NULL parameters for RSA public keys (CL 16166, CL 27312)
  828 crypto/x509: return error for missing SerialNumber (CL 27238)
  829 -->
  830     </p>
  831 
  832     <p><!-- CL 30375 -->
  833       Root certificates will now also be looked for
  834       at <code>/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem</code>
  835       on Linux, to support RHEL and CentOS.
  836     </p>
  837 
  838   </dd>
  839 </dl>
  840 
  841 <dl id="database_sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt>
  842   <dd>
  843     <p>
  844       The package now supports <code>context.Context</code>. There are new methods
  845       ending in <code>Context</code> such as
  846       <a href="/pkg/database/sql/#DB.QueryContext"><code>DB.QueryContext</code></a> and
  847       <a href="/pkg/database/sql/#DB.PrepareContext"><code>DB.PrepareContext</code></a>
  848       that take context arguments. Using the new <code>Context</code> methods ensures that
  849       connections are closed and returned to the connection pool when the
  850       request is done; enables canceling in-progress queries
  851       should the driver support that; and allows the database
  852       pool to cancel waiting for the next available connection.
  853     </p>
  854     <p>
  855       The <a href="/pkg/database/sql#IsolationLevel"><code>IsolationLevel</code></a>
  856       can now be set when starting a transaction by setting the isolation level
  857       on <a href="/pkg/database/sql#TxOptions.Isolation"><code>TxOptions.Isolation</code></a> and passing
  858       it to <a href="/pkg/database/sql#DB.BeginTx"><code>DB.BeginTx</code></a>.
  859       An error will be returned if an isolation level is selected that the driver
  860       does not support. A read-only attribute may also be set on the transaction
  861       by setting <a href="/pkg/database/sql/#TxOptions.ReadOnly"><code>TxOptions.ReadOnly</code></a>
  862       to true.
  863     </p>
  864     <p>
  865       Queries now expose the SQL column type information for drivers that support it.
  866       Rows can return <a href="/pkg/database/sql#Rows.ColumnTypes"><code>ColumnTypes</code></a>
  867       which can include SQL type information, column type lengths, and the Go type.
  868     </p>
  869     <p>
  870       A <a href="/pkg/database/sql/#Rows"><code>Rows</code></a>
  871       can now represent multiple result sets. After
  872       <a href="/pkg/database/sql/#Rows.Next"><code>Rows.Next</code></a> returns false,
  873       <a href="/pkg/database/sql/#Rows.NextResultSet"><code>Rows.NextResultSet</code></a>
  874       may be called to advance to the next result set. The existing <code>Rows</code>
  875       should continue to be used after it advances to the next result set.
  876       </p>
  877     <p>
  878       <a href="/pkg/database/sql/#NamedArg"><code>NamedArg</code></a> may be used
  879       as query arguments. The new function <a href="/pkg/database/sql/#Named"><code>Named</code></a>
  880       helps create a <a href="/pkg/database/sql/#NamedArg"><code>NamedArg</code></a>
  881       more succinctly.
  882     <p>
  883       If a driver supports the new
  884       <a href="/pkg/database/sql/driver/#Pinger"><code>Pinger</code></a>
  885       interface, the
  886       <a href="/pkg/database/sql/#DB.Ping"><code>DB.Ping</code></a>
  887       and
  888       <a href="/pkg/database/sql/#DB.PingContext"><code>DB.PingContext</code></a>
  889       methods will use that interface to check whether a
  890       database connection is still valid.
  891     </p>
  892     <p>
  893       The new <code>Context</code> query methods work for all drivers, but
  894       <code>Context</code> cancelation is not responsive unless the driver has been
  895       updated to use them. The other features require driver support in
  896       <a href="/pkg/database/sql/driver"><code>database/sql/driver</code></a>.
  897       Driver authors should review the new interfaces. Users of existing
  898       driver should review the driver documentation to see what
  899       it supports and any system specific documentation on each feature.
  900     </p>
  901   </dd>
  902 </dl>
  903 
  904 <dl id="debug_pe"><dt><a href="/pkg/debug/pe/">debug/pe</a></dt>
  905   <dd>
  906     <p> <!-- CL 22720, CL 27212, CL 22181, CL 22332, CL 22336, Issue 15345 -->
  907       The package has been extended and is now used by
  908       <a href="/cmd/link/">the Go linker</a> to read <code>gcc</code>-generated object files.
  909       The new
  910       <a href="/pkg/debug/pe/#File.StringTable"><code>File.StringTable</code></a>
  911       and
  912       <a href="/pkg/debug/pe/#Section.Relocs"><code>Section.Relocs</code></a>
  913       fields provide access to the COFF string table and COFF relocations.
  914       The new
  915       <a href="/pkg/debug/pe/#File.COFFSymbols"><code>File.COFFSymbols</code></a>
  916       allows low-level access to the COFF symbol table.
  917       </p>
  918   </dd>
  919 </dl>
  920 
  921 <dl id="encoding_base64"><dt><a href="/pkg/encoding/base64/">encoding/base64</a></dt>
  922   <dd>
  923     <p> <!-- CL 24964 -->
  924       The new
  925       <a href="/pkg/encoding/base64/#Encoding.Strict"><code>Encoding.Strict</code></a>
  926       method returns an <code>Encoding</code> that causes the decoder
  927       to return an error when the trailing padding bits are not zero.
  928     </p>
  929   </dd>
  930 </dl>
  931 
  932 <dl id="encoding_binary"><dt><a href="/pkg/encoding/binary/">encoding/binary</a></dt>
  933   <dd>
  934     <p> <!-- CL 28514 -->
  935       <a href="/pkg/encoding/binary/#Read"><code>Read</code></a>
  936       and
  937       <a href="/pkg/encoding/binary/#Write"><code>Write</code></a>
  938       now support booleans.
  939     </p>
  940   </dd>
  941 </dl>
  942 
  943 <dl id="encoding_json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
  944   <dd>
  945 
  946     <p> <!-- CL 18692  -->
  947       <a href="/pkg/encoding/json/#UnmarshalTypeError"><code>UnmarshalTypeError</code></a>
  948       now includes the struct and field name.
  949     </p>
  950 
  951     <p> <!-- CL 31932 -->
  952       A nil <a href="/pkg/encoding/json/#Marshaler"><code>Marshaler</code></a>
  953       now marshals as a JSON <code>null</code> value.
  954     </p>
  955 
  956     <p> <!-- CL 21811 -->
  957       A <a href="/pkg/encoding/json/#RawMessage"><code>RawMessage</code></a> value now
  958       marshals the same as its pointer type.
  959     </p>
  960 
  961     <p> <!-- CL 30371 -->
  962       <a href="/pkg/encoding/json/#Marshal"><code>Marshal</code></a>
  963       encodes floating-point numbers using the same format as in ES6,
  964       preferring decimal (not exponential) notation for a wider range of values.
  965       In particular, all floating-point integers up to 2<sup>64</sup> format the
  966       same as the equivalent <code>int64</code> representation.
  967     </p>
  968 
  969     <p> <!-- CL 30944 -->
  970       In previous versions of Go, unmarshaling a JSON <code>null</code> into an
  971       <a href="/pkg/encoding/json/#Unmarshaler"><code>Unmarshaler</code></a>
  972       was considered a no-op; now the <code>Unmarshaler</code>'s
  973       <code>UnmarshalJSON</code> method is called with the JSON literal
  974       <code>null</code> and can define the semantics of that case.
  975     </p>
  976 
  977   </dd>
  978 </dl>
  979 
  980 <dl id="encoding_pem"><dt><a href="/pkg/encoding/pem/">encoding/pem</a></dt>
  981   <dd>
  982     <p> <!-- CL 27391 -->
  983       <a href="/pkg/encoding/pem/#Decode"><code>Decode</code></a>
  984       is now strict about the format of the ending line.
  985     </p>
  986   </dd>
  987 </dl>
  988 
  989 <dl id="encoding_xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
  990   <dd>
  991     <p> <!-- CL 30946 -->
  992       <a href="/pkg/encoding/xml/#Unmarshal"><code>Unmarshal</code></a>
  993       now has wildcard support for collecting all attributes using
  994       the new <code>",any,attr"</code> struct tag.
  995     </p>
  996   </dd>
  997 </dl>
  998 
  999 <dl id="expvar"><dt><a href="/pkg/expvar/">expvar</a></dt>
 1000   <dd>
 1001     <p> <!-- CL 30917 -->
 1002       The new methods
 1003       <a href="/pkg/expvar/#Int.Value"><code>Int.Value</code></a>,
 1004       <a href="/pkg/expvar/#String.Value"><code>String.Value</code></a>,
 1005       <a href="/pkg/expvar/#Float.Value"><code>Float.Value</code></a>, and
 1006       <a href="/pkg/expvar/#Func.Value"><code>Func.Value</code></a>
 1007       report the current value of an exported variable.
 1008     </p>
 1009 
 1010     <p> <!-- CL 24722 -->
 1011       The new
 1012       function <a href="/pkg/expvar/#Handler"><code>Handler</code></a>
 1013       returns the package's HTTP handler, to enable installing it in
 1014       non-standard locations.
 1015       </p>
 1016   </dd>
 1017 </dl>
 1018 
 1019 <dl id="fmt"><dt><a href="/pkg/fmt/">fmt</a></dt>
 1020   <dd>
 1021     <p><!-- CL 30611 -->
 1022       <a href="/pkg/fmt/#Scanf"><code>Scanf</code></a>,
 1023       <a href="/pkg/fmt/#Fscanf"><code>Fscanf</code></a>, and
 1024       <a href="/pkg/fmt/#Sscanf"><code>Sscanf</code></a> now
 1025       handle spaces differently and more consistently than
 1026       previous releases. See the
 1027       <a href="/pkg/fmt/#hdr-Scanning">scanning documentation</a>
 1028       for details.
 1029     </p>
 1030   </dd>
 1031 </dl>
 1032 
 1033 <dl id="go_doc"><dt><a href="/pkg/go/doc/">go/doc</a></dt>
 1034   <dd>
 1035     <p><!-- CL 29870 -->
 1036       The new <a href="/pkg/go/doc/#IsPredeclared"><code>IsPredeclared</code></a>
 1037       function reports whether a string is a predeclared identifier.
 1038     </p>
 1039   </dd>
 1040 </dl>
 1041 
 1042 <dl id="go_types"><dt><a href="/pkg/go/types/">go/types</a></dt>
 1043   <dd>
 1044     <p><!-- CL 30715 -->
 1045       The new function
 1046       <a href="/pkg/go/types/#Default"><code>Default</code></a>
 1047       returns the default "typed" type for an "untyped" type.
 1048     </p>
 1049 
 1050     <p><!-- CL 31939 -->
 1051       The alignment of <code>complex64</code> now matches
 1052       the <a href="/cmd/compile/">Go compiler</a>.
 1053     </p>
 1054   </dd>
 1055 </dl>
 1056 
 1057 <dl id="html_template"><dt><a href="/pkg/html/template/">html/template</a></dt>
 1058   <dd>
 1059     <p><!-- CL 14336 -->
 1060       The package now validates
 1061       the <code>"type"</code> attribute on
 1062       a <code>&lt;script&gt;</code> tag.
 1063     </p>
 1064   </dd>
 1065 </dl>
 1066 
 1067 <dl id="image_png"><dt><a href="/pkg/image/png/">image/png</a></dt>
 1068   <dd>
 1069     <p> <!-- CL 32143, CL 32140 -->
 1070       <a href="/pkg/image/png/#Decode"><code>Decode</code></a>
 1071       (and <code>DecodeConfig</code>)
 1072       now supports True Color and grayscale transparency.
 1073     </p>
 1074     <p> <!-- CL 29872 -->
 1075       <a href="/pkg/image/png/#Encoder"><code>Encoder</code></a>
 1076       is now faster and creates smaller output
 1077       when encoding paletted images.
 1078       </p>
 1079   </dd>
 1080 </dl>
 1081 
 1082 <dl id="math_big"><dt><a href="/pkg/math/big/">math/big</a></dt>
 1083   <dd>
 1084     <p><!-- CL 30706 -->
 1085       The new method
 1086       <a href="/pkg/math/big/#Int.Sqrt"><code>Int.Sqrt</code></a>
 1087       calculates ⌊√x⌋.
 1088     </p>
 1089 
 1090     <p>
 1091       The new method
 1092       <a href="/pkg/math/big/#Float.Scan"><code>Float.Scan</code></a>
 1093       is a support routine for
 1094       <a href="/pkg/fmt/#Scanner"><code>fmt.Scanner</code></a>.
 1095     </p>
 1096 
 1097     <p>
 1098       <a href="/pkg/math/big/#Int.ModInverse"><code>Int.ModInverse</code></a>
 1099       now supports negative numbers.
 1100     </p>
 1101 
 1102   </dd>
 1103 </dl>
 1104 
 1105 <dl id="math_rand"><dt><a href="/pkg/math/rand/">math/rand</a></dt>
 1106   <dd>
 1107 
 1108     <p><!-- CL 27253, CL 33456 -->
 1109       The new <a href="/pkg/math/rand/#Rand.Uint64"><code>Rand.Uint64</code></a>
 1110       method returns <code>uint64</code> values. The
 1111       new <a href="/pkg/math/rand/#Source64"><code>Source64</code></a>
 1112       interface describes sources capable of generating such values
 1113       directly; otherwise the <code>Rand.Uint64</code> method
 1114       constructs a <code>uint64</code> from two calls
 1115       to <a href="/pkg/math/rand/#Source"><code>Source</code></a>'s
 1116       <code>Int63</code> method.
 1117     </p>
 1118 
 1119   </dd>
 1120 </dl>
 1121 
 1122 <dl id="mime"><dt><a href="/pkg/mime/">mime</a></dt>
 1123   <dd>
 1124     <p> <!-- CL 32175 -->
 1125     <a href="/pkg/mime/#ParseMediaType"><code>ParseMediaType</code></a>
 1126     now preserves unnecessary backslash escapes as literals,
 1127     in order to support MSIE.
 1128     When MSIE sends a full file path (in “intranet mode”), it does not
 1129     escape backslashes: “<code>C:\dev\go\foo.txt</code>”, not
 1130 <code>C:\\dev\\go\\foo.txt</code>”.
 1131     If we see an unnecessary backslash escape, we now assume it is from MSIE
 1132     and intended as a literal backslash.
 1133     No known MIME generators emit unnecessary backslash escapes
 1134     for simple token characters like numbers and letters.
 1135     </p>
 1136   </dd>
 1137 </dl>
 1138 
 1139 <dl id="mime_quotedprintable"><dt><a href="/pkg/mime/quotedprintable/">mime/quotedprintable</a></dt>
 1140   <dd>
 1141 
 1142     <p>
 1143       The
 1144       <a href="/pkg/mime/quotedprintable/#Reader"><code>Reader</code></a>'s
 1145       parsing has been relaxed in two ways to accept
 1146       more input seen in the wild.
 1147 
 1148       <!-- CL 32174 -->
 1149       First, it accepts an equals sign (<code>=</code>) not followed
 1150       by two hex digits as a literal equal sign.
 1151 
 1152       <!-- CL 27530 -->
 1153       Second, it silently ignores a trailing equals sign at the end of
 1154       an encoded input.
 1155     </p>
 1156 
 1157   </dd>
 1158 </dl>
 1159 
 1160 <dl id="net"><dt><a href="/pkg/net/">net</a></dt>
 1161   <dd>
 1162 
 1163     <p><!-- CL 30164, CL 33473 -->
 1164       The <a href="/pkg/net/#Conn"><code>Conn</code></a> documentation
 1165       has been updated to clarify expectations of an interface
 1166       implementation. Updates in the <code>net/http</code> packages
 1167       depend on implementations obeying the documentation.
 1168     </p>
 1169     <p><i>Updating:</i> implementations of the <code>Conn</code> interface should verify
 1170       they implement the documented semantics. The
 1171       <a href="https://godoc.org/golang.org/x/net/nettest">golang.org/x/net/nettest</a>
 1172       package will exercise a <code>Conn</code> and validate it behaves properly.
 1173     </p>
 1174 
 1175     <p><!-- CL 32099 -->
 1176       The new method
 1177       <a href="/pkg/net/#UnixListener.SetUnlinkOnClose"><code>UnixListener.SetUnlinkOnClose</code></a>
 1178       sets whether the underlying socket file should be removed from the file system when
 1179       the listener is closed.
 1180     </p>
 1181 
 1182     <p><!-- CL 29951 -->
 1183       The new <a href="/pkg/net/#Buffers"><code>Buffers</code></a> type permits
 1184       writing to the network more efficiently from multiple discontiguous buffers
 1185       in memory. On certain machines, for certain types of connections,
 1186       this is optimized into an OS-specific batch write operation (such as <code>writev</code>).
 1187     </p>
 1188 
 1189     <p><!-- CL 29440 -->
 1190       The new <a href="/pkg/net/#Resolver"><code>Resolver</code></a> looks up names and numbers
 1191       and supports <a href="/pkg/context/#Context"><code>context.Context</code></a>.
 1192       The <a href="/pkg/net/#Dialer"><code>Dialer</code></a> now has an optional
 1193       <a href="/pkg/net/#Dialer.Resolver"><code>Resolver</code> field</a>.
 1194     </p>
 1195 
 1196     <p><!-- CL 29892 -->
 1197       <a href="/pkg/net/#Interfaces"><code>Interfaces</code></a> is now supported on Solaris.
 1198     </p>
 1199 
 1200     <p><!-- CL 29233, CL 24901 -->
 1201       The Go DNS resolver now supports <code>resolv.conf</code>'s “<code>rotate</code>
 1202       and “<code>option</code> <code>ndots:0</code>” options. The “<code>ndots</code>” option is
 1203       now respected in the same way as <code>libresolve</code>.
 1204     </p>
 1205 
 1206   </dd>
 1207 </dl>
 1208 
 1209 <dl id="net_http"><dt><a href="/pkg/net/http/">net/http</a></dt>
 1210   <dd>
 1211 
 1212     <p>Server changes:</p>
 1213     <ul>
 1214       <li>The server now supports graceful shutdown support, <a href="#http_shutdown">mentioned above</a>.</li>
 1215 
 1216       <li> <!-- CL 32024 -->
 1217         The <a href="/pkg/net/http/#Server"><code>Server</code></a>
 1218         adds configuration options
 1219         <code>ReadHeaderTimeout</code> and <code>IdleTimeout</code>
 1220         and documents <code>WriteTimeout</code>.
 1221       </li>
 1222 
 1223       <li> <!-- CL 32014 -->
 1224         <a href="/pkg/net/http/#FileServer"><code>FileServer</code></a>
 1225         and
 1226         <a href="/pkg/net/http/#ServeContent"><code>ServeContent</code></a>
 1227         now support HTTP <code>If-Match</code> conditional requests,
 1228         in addition to the previous <code>If-None-Match</code>
 1229         support for ETags properly formatted according to RFC 7232, section 2.3.
 1230       </li>
 1231     </ul>
 1232 
 1233     <p>
 1234       There are several additions to what a server's <code>Handler</code> can do:
 1235     </p>
 1236 
 1237     <ul>
 1238       <li><!-- CL 31173 -->
 1239         The <a href="/pkg/context/#Context"><code>Context</code></a>
 1240         returned
 1241         by <a href="/pkg/net/http/#Request.Context"><code>Request.Context</code></a>
 1242         is canceled if the underlying <code>net.Conn</code>
 1243         closes. For instance, if the user closes their browser in the
 1244         middle of a slow request, the <code>Handler</code> can now
 1245         detect that the user is gone. This complements the
 1246         existing <a href="/pkg/net/http/#CloseNotifier"><code>CloseNotifier</code></a>
 1247         support. This functionality requires that the underlying
 1248         <a href="/pkg/net/#Conn"><code>net.Conn</code></a> implements
 1249         <a href="#net">recently clarified interface documentation</a>.
 1250       </li>
 1251 
 1252       <li><!-- CL 32479 -->
 1253         To serve trailers produced after the header has already been written,
 1254         see the new
 1255         <a href="/pkg/net/http/#TrailerPrefix"><code>TrailerPrefix</code></a>
 1256         mechanism.
 1257       </li>
 1258 
 1259       <li><!-- CL 33099 -->
 1260         A <code>Handler</code> can now abort a response by panicking
 1261         with the error
 1262         <a href="/pkg/net/http/#ErrAbortHandler"><code>ErrAbortHandler</code></a>.
 1263       </li>
 1264 
 1265       <li><!-- CL 30812 -->
 1266         A <code>Write</code> of zero bytes to a
 1267         <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>
 1268         is now defined as a
 1269         way to test whether a <code>ResponseWriter</code> has been hijacked:
 1270         if so, the <code>Write</code> returns
 1271         <a href="/pkg/net/http/#ErrHijacked"><code>ErrHijacked</code></a>
 1272         without printing an error
 1273         to the server's error log.
 1274       </li>
 1275 
 1276     </ul>
 1277 
 1278     <p>Client &amp; Transport changes:</p>
 1279     <ul>
 1280       <li><!-- CL 28930, CL 31435 -->
 1281         The <a href="/pkg/net/http/#Client"><code>Client</code></a>
 1282         now copies most request headers on redirect. See
 1283         <a href="/pkg/net/http/#Client">the documentation</a>
 1284         on the <code>Client</code> type for details.
 1285       </li>
 1286 
 1287       <li><!-- CL 29072 -->
 1288         The <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
 1289         now supports international domain names. Consequently, so do
 1290         <a href="/pkg/net/http/#Get">Get</a> and other helpers.
 1291       </li>
 1292 
 1293       <li><!-- CL 31733, CL 29852 -->
 1294         The <code>Client</code> now supports 301, 307, and 308 redirects.
 1295 
 1296         For example, <code>Client.Post</code> now follows 301
 1297         redirects, converting them to <code>GET</code> requests
 1298         without bodies, like it did for 302 and 303 redirect responses
 1299         previously.
 1300 
 1301         The <code>Client</code> now also follows 307 and 308
 1302         redirects, preserving the original request method and body, if
 1303         any. If the redirect requires resending the request body, the
 1304         request must have the new
 1305         <a href="/pkg/net/http/#Request"><code>Request.GetBody</code></a>
 1306         field defined.
 1307         <a href="/pkg/net/http/#NewRequest"><code>NewRequest</code></a>
 1308         sets <code>Request.GetBody</code> automatically for common
 1309         body types.
 1310       </li>
 1311 
 1312       <li><!-- CL 32482 -->
 1313         The <code>Transport</code> now rejects requests for URLs with
 1314         ports containing non-digit characters.
 1315       </li>
 1316 
 1317       <li><!-- CL 27117 -->
 1318         The <code>Transport</code> will now retry non-idempotent
 1319         requests if no bytes were written before a network failure
 1320         and the request has no body.
 1321       </li>
 1322 
 1323       <li><!-- CL 32481 -->
 1324         The
 1325         new <a href="/pkg/net/http/#Transport"><code>Transport.ProxyConnectHeader</code></a>
 1326         allows configuration of header values to send to a proxy
 1327         during a <code>CONNECT</code> request.
 1328       </li>
 1329 
 1330       <li> <!-- CL 28077 -->
 1331         The <a href="/pkg/net/http/#DefaultTransport"><code>DefaultTransport.Dialer</code></a>
 1332         now enables <code>DualStack</code> ("<a href="https://tools.ietf.org/html/rfc6555">Happy Eyeballs</a>") support,
 1333         allowing the use of IPv4 as a backup if it looks like IPv6 might be
 1334         failing.
 1335       </li>
 1336 
 1337       <li> <!-- CL 31726 -->
 1338         The <a href="/pkg/net/http/#Transport"><code>Transport</code></a>
 1339         no longer reads a byte of a non-nil
 1340         <a href="/pkg/net/http/#Request.Body"><code>Request.Body</code></a>
 1341         when the
 1342         <a href="/pkg/net/http/#Request.ContentLength"><code>Request.ContentLength</code></a>
 1343         is zero to determine whether the <code>ContentLength</code>
 1344         is actually zero or just undefined.
 1345         To explicitly signal that a body has zero length,
 1346         either set it to <code>nil</code>, or set it to the new value
 1347         <a href="/pkg/net/http/#NoBody"><code>NoBody</code></a>.
 1348         The new <code>NoBody</code> value is intended for use by <code>Request</code>
 1349         constructor functions; it is used by
 1350         <a href="/pkg/net/http/#NewRequest"><code>NewRequest</code></a>.
 1351       </li>
 1352     </ul>
 1353 
 1354   </dd>
 1355 </dl>
 1356 
 1357 <dl id="net_http_httptrace"><dt><a href="/pkg/net/http/httptrace/">net/http/httptrace</a></dt>
 1358   <dd>
 1359     <p> <!-- CL 30359 -->
 1360     There is now support for tracing a client request's TLS handshakes with
 1361     the new
 1362     <a href="/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeStart"><code>ClientTrace.TLSHandshakeStart</code></a>
 1363     and
 1364     <a href="/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeDone"><code>ClientTrace.TLSHandshakeDone</code></a>.
 1365     </p>
 1366   </dd>
 1367 </dl>
 1368 
 1369 <dl id="net_http_httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt>
 1370   <dd>
 1371     <p> <!-- CL 32356 -->
 1372     The <a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a>
 1373     has a new optional hook,
 1374     <a href="/pkg/net/http/httputil/#ReverseProxy.ModifyResponse"><code>ModifyResponse</code></a>,
 1375     for modifying the response from the back end before proxying it to the client.
 1376     </p>
 1377 
 1378   </dd>
 1379 </dl>
 1380 
 1381 <dl id="net_mail"><dt><a href="/pkg/net/mail/">net/mail</a></dt>
 1382   <dd>
 1383 
 1384     <p> <!-- CL 32176 -->
 1385       Empty quoted strings are once again allowed in the name part of
 1386       an address. That is, Go 1.4 and earlier accepted
 1387       <code>""</code> <code>&lt;gopher@example.com&gt;</code>,
 1388       but Go 1.5 introduced a bug that rejected this address.
 1389       The address is recognized again.
 1390     </p>
 1391 
 1392     <p> <!-- CL 31581 -->
 1393       The
 1394       <a href="/pkg/net/mail/#Header.Date"><code>Header.Date</code></a>
 1395       method has always provided a way to parse
 1396       the <code>Date:</code> header.
 1397       A new function
 1398       <a href="/pkg/net/mail/#ParseDate"><code>ParseDate</code></a>
 1399       allows parsing dates found in other
 1400       header lines, such as the <code>Resent-Date:</code> header.
 1401     </p>
 1402 
 1403   </dd>
 1404 </dl>
 1405 
 1406 <dl id="net_smtp"><dt><a href="/pkg/net/smtp/">net/smtp</a></dt>
 1407   <dd>
 1408 
 1409     <p> <!-- CL 33143 -->
 1410       If an implementation of the
 1411       <a href="/pkg/net/smtp/#Auth"><code>Auth.Start</code></a>
 1412       method returns an empty <code>toServer</code> value,
 1413       the package no longer sends
 1414       trailing whitespace in the SMTP <code>AUTH</code> command,
 1415       which some servers rejected.
 1416     </p>
 1417 
 1418   </dd>
 1419 </dl>
 1420 
 1421 <dl id="net_url"><dt><a href="/pkg/net/url/">net/url</a></dt>
 1422   <dd>
 1423 
 1424     <p> <!-- CL 31322 -->
 1425       The new functions
 1426       <a href="/pkg/net/url/#PathEscape"><code>PathEscape</code></a>
 1427       and
 1428       <a href="/pkg/net/url/#PathUnescape"><code>PathUnescape</code></a>
 1429       are similar to the query escaping and unescaping functions but
 1430       for path elements.
 1431     </p>
 1432 
 1433     <p> <!-- CL 28933 -->
 1434       The new methods
 1435       <a href="/pkg/net/url/#URL.Hostname"><code>URL.Hostname</code></a>
 1436       and
 1437       <a href="/pkg/net/url/#URL.Port"><code>URL.Port</code></a>
 1438       return the hostname and port fields of a URL,
 1439       correctly handling the case where the port may not be present.
 1440     </p>
 1441 
 1442     <p> <!-- CL 28343 -->
 1443       The existing method
 1444       <a href="/pkg/net/url/#URL.ResolveReference"><code>URL.ResolveReference</code></a>
 1445       now properly handles paths with escaped bytes without losing
 1446       the escaping.
 1447     </p>
 1448 
 1449     <p> <!-- CL 31467 -->
 1450       The <code>URL</code> type now implements
 1451       <a href="/pkg/encoding/#BinaryMarshaler"><code>encoding.BinaryMarshaler</code></a> and
 1452       <a href="/pkg/encoding/#BinaryUnmarshaler"><code>encoding.BinaryUnmarshaler</code></a>,
 1453       making it possible to process URLs in <a href="/pkg/encoding/gob/">gob data</a>.
 1454     </p>
 1455 
 1456     <p> <!-- CL 29610, CL 31582 -->
 1457       Following RFC 3986,
 1458       <a href="/pkg/net/url/#Parse"><code>Parse</code></a>
 1459       now rejects URLs like <code>this_that:other/thing</code> instead of
 1460       interpreting them as relative paths (<code>this_that</code> is not a valid scheme).
 1461       To force interpretation as a relative path,
 1462       such URLs should be prefixed with “<code>./</code>”.
 1463       The <code>URL.String</code> method now inserts this prefix as needed.
 1464     </p>
 1465 
 1466   </dd>
 1467 </dl>
 1468 
 1469 <dl id="os"><dt><a href="/pkg/os/">os</a></dt>
 1470   <dd>
 1471     <p> <!-- CL 16551 -->
 1472       The new function
 1473       <a href="/pkg/os/#Executable"><code>Executable</code></a> returns
 1474       the path name of the running executable.
 1475     </p>
 1476 
 1477     <p> <!-- CL 30614 -->
 1478       An attempt to call a method on
 1479       an <a href="/pkg/os/#File"><code>os.File</code></a> that has
 1480       already been closed will now return the new error
 1481       value <a href="/pkg/os/#ErrClosed"><code>os.ErrClosed</code></a>.
 1482       Previously it returned a system-specific error such
 1483       as <code>syscall.EBADF</code>.
 1484     </p>
 1485 
 1486     <p> <!-- CL 31358 -->
 1487       On Unix systems, <a href="/pkg/os/#Rename"><code>os.Rename</code></a>
 1488       will now return an error when used to rename a directory to an
 1489       existing empty directory.
 1490       Previously it would fail when renaming to a non-empty directory
 1491       but succeed when renaming to an empty directory.
 1492       This makes the behavior on Unix correspond to that of other systems.
 1493     </p>
 1494 
 1495     <p> <!-- CL 32451 -->
 1496       On Windows, long absolute paths are now transparently converted to
 1497       extended-length paths (paths that start with “<code>\\?\</code>”).
 1498       This permits the package to work with files whose path names are
 1499       longer than 260 characters.
 1500     </p>
 1501 
 1502     <p> <!-- CL 29753 -->
 1503       On Windows, <a href="/pkg/os/#IsExist"><code>os.IsExist</code></a>
 1504       will now return <code>true</code> for the system
 1505       error <code>ERROR_DIR_NOT_EMPTY</code>.
 1506       This roughly corresponds to the existing handling of the Unix
 1507       error <code>ENOTEMPTY</code>.
 1508     </p>
 1509 
 1510     <p> <!-- CL 32152 -->
 1511       On Plan 9, files that are not served by <code>#M</code> will now
 1512       have <a href="/pkg/os/#ModeDevice"><code>ModeDevice</code></a> set in
 1513       the value returned
 1514       by <a href="/pkg/os/#FileInfo"><code>FileInfo.Mode</code></a>.
 1515     </p>
 1516   </dd>
 1517 </dl>
 1518 
 1519 <dl id="path_filepath"><dt><a href="/pkg/path/filepath/">path/filepath</a></dt>
 1520   <dd>
 1521     <p>
 1522       A number of bugs and corner cases on Windows were fixed:
 1523       <a href="/pkg/path/filepath/#Abs"><code>Abs</code></a> now calls <code>Clean</code> as documented,
 1524       <a href="/pkg/path/filepath/#Glob"><code>Glob</code></a> now matches
 1525 <code>\\?\c:\*</code>”,
 1526       <a href="/pkg/path/filepath/#EvalSymlinks"><code>EvalSymlinks</code></a> now
 1527       correctly handles “<code>C:.</code>”, and
 1528       <a href="/pkg/path/filepath/#Clean"><code>Clean</code></a> now properly
 1529       handles a leading “<code>..</code>” in the path.
 1530     </p>
 1531   </dd>
 1532 </dl>
 1533 
 1534 <dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
 1535   <dd>
 1536     <p> <!-- CL 30088 -->
 1537       The new function
 1538       <a href="/pkg/reflect/#Swapper"><code>Swapper</code></a> was
 1539       added to support <a href="#sortslice"><code>sort.Slice</code></a>.
 1540     </p>
 1541   </dd>
 1542 </dl>
 1543 
 1544 <dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
 1545   <dd>
 1546     <p> <!-- CL 31210 -->
 1547       The <a href="/pkg/strconv/#Unquote"><code>Unquote</code></a>
 1548       function now strips carriage returns (<code>\r</code>) in
 1549       backquoted raw strings, following the
 1550       <a href="/ref/spec#String_literals">Go language semantics</a>.
 1551     </p>
 1552   </dd>
 1553 </dl>
 1554 
 1555 <dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
 1556   <dd>
 1557     <p> <!-- CL 25050, CL 25022 -->
 1558       The <a href="/pkg/syscall/#Getpagesize"><code>Getpagesize</code></a>
 1559       now returns the system's size, rather than a constant value.
 1560       Previously it always returned 4KB.
 1561     </p>
 1562 
 1563     <p> <!-- CL 31446 -->
 1564       The signature
 1565       of <a href="/pkg/syscall/#Utimes"><code>Utimes</code></a> has
 1566       changed on Solaris to match all the other Unix systems'
 1567       signature. Portable code should continue to use
 1568       <a href="/pkg/os/#Chtimes"><code>os.Chtimes</code></a> instead.
 1569     </p>
 1570 
 1571     <p> <!-- CL 32319 -->
 1572       The <code>X__cmsg_data</code> field has been removed from
 1573       <a href="/pkg/syscall/#Cmsghdr"><code>Cmsghdr</code></a>.
 1574       </p>
 1575   </dd>
 1576 </dl>
 1577 
 1578 <dl id="text_template"><dt><a href="/pkg/text/template/">text/template</a></dt>
 1579   <dd>
 1580     <p> <!-- CL 31462 -->
 1581       <a href="/pkg/text/template/#Template.Execute"><code>Template.Execute</code></a>
 1582       can now take a
 1583       <a href="/pkg/reflect/#Value"><code>reflect.Value</code></a> as its data
 1584       argument, and
 1585       <a href="/pkg/text/template/#FuncMap"><code>FuncMap</code></a>
 1586       functions can also accept and return <code>reflect.Value</code>.
 1587     </p>
 1588 
 1589   </dd>
 1590 </dl>
 1591 
 1592 <dl id="time"><dt><a href="/pkg/time/">time</a></dt>
 1593   <dd>
 1594 
 1595     <p> <!-- CL 20118 --> The new function
 1596       <a href="/pkg/time/#Until"><code>Until</code></a> complements
 1597       the analogous <code>Since</code> function.
 1598     </p>
 1599 
 1600     <p> <!-- CL 29338 -->
 1601       <a href="/pkg/time/#ParseDuration"><code>ParseDuration</code></a>
 1602       now accepts long fractional parts.
 1603     </p>
 1604 
 1605     <p> <!-- CL 33429 -->
 1606       <a href="/pkg/time/#Parse"><code>Parse</code></a>
 1607       now rejects dates before the start of a month, such as June 0;
 1608       it already rejected dates beyond the end of the month, such as
 1609       June 31 and July 32.
 1610     </p>
 1611 
 1612     <p> <!-- CL 33029 --> <!-- CL 34816 -->
 1613       The <code>tzdata</code> database has been updated to version
 1614       2016j for systems that don't already have a local time zone
 1615       database.
 1616     </p>
 1617 
 1618     <p>
 1619   </dd>
 1620 </dl>
 1621 
 1622 <dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
 1623   <dd>
 1624     <p><!-- CL 29970 -->
 1625       The new method
 1626       <a href="/pkg/testing/#T.Name"><code>T.Name</code></a>
 1627       (and <code>B.Name</code>) returns the name of the current
 1628       test or benchmark.
 1629     </p>
 1630 
 1631     <p><!-- CL 32483 -->
 1632       The new function
 1633       <a href="/pkg/testing/#CoverMode"><code>CoverMode</code></a>
 1634       reports the test coverage mode.
 1635     </p>
 1636 
 1637     <p><!-- CL 32615 -->
 1638       Tests and benchmarks are now marked as failed if the race
 1639       detector is enabled and a data race occurs during execution.
 1640       Previously, individual test cases would appear to pass,
 1641       and only the overall execution of the test binary would fail.
 1642     </p>
 1643 
 1644     <p><!-- CL 32455 -->
 1645       The signature of the
 1646       <a href="/pkg/testing/#MainStart"><code>MainStart</code></a>
 1647       function has changed, as allowed by the documentation. It is an
 1648       internal detail and not part of the Go 1 compatibility promise.
 1649       If you're not calling <code>MainStart</code> directly but see
 1650       errors, that likely means you set the
 1651       normally-empty <code>GOROOT</code> environment variable and it
 1652       doesn't match the version of your <code>go</code> command's binary.
 1653     </p>
 1654 
 1655   </dd>
 1656 </dl>
 1657 
 1658 <dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
 1659   <dd>
 1660     <p><!-- CL 30935 -->
 1661       <a href="/pkg/unicode/#SimpleFold"><code>SimpleFold</code></a>
 1662       now returns its argument unchanged if the provided input was an invalid rune.
 1663       Previously, the implementation failed with an index bounds check panic.
 1664     </p>
 1665   </dd>
 1666 </dl>