github.com/likebike/go--@v0.0.0-20190911215757-0bd925d16e96/go/doc/go1.8.html (about)

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