github.com/4ad/go@v0.0.0-20161219182952-69a12818b605/doc/go1.7.html (about)

     1  <!--{
     2  	"Title": "Go 1.7 Release Notes",
     3  	"Path":  "/doc/go1.7",
     4  	"Template": true
     5  }-->
     6  
     7  <!--
     8  for acme:
     9  Edit .,s;^PKG:([a-z][A-Za-z0-9_/]+);<a href="/pkg/\1/"><code>\1</code></a>;g
    10  Edit .,s;^([a-z][A-Za-z0-9_/]+)\.([A-Z][A-Za-z0-9_]+\.)?([A-Z][A-Za-z0-9_]+)([ .',)]|$);<a href="/pkg/\1/#\2\3"><code>\3</code></a>\4;g
    11  Edit .,s;^FULL:([a-z][A-Za-z0-9_/]+)\.([A-Z][A-Za-z0-9_]+\.)?([A-Z][A-Za-z0-9_]+)([ .',)]|$);<a href="/pkg/\1/#\2\3"><code>\1.\2\3</code></a>\4;g
    12  Edit .,s;^DPKG:([a-z][A-Za-z0-9_/]+);<dl id="\1"><a href="/pkg/\1/">\1</a></dl>;g
    13  
    14  rsc last updated through 6729576
    15  -->
    16  
    17  <!--
    18  NOTE: In this document and others in this directory, the convention is to
    19  set fixed-width phrases with non-fixed-width spaces, as in
    20  <code>hello</code> <code>world</code>.
    21  Do not send CLs removing the interior tags from such phrases.
    22  -->
    23  
    24  <style>
    25  ul li { margin: 0.5em 0; }
    26  </style>
    27  
    28  <h2 id="introduction">Introduction to Go 1.7</h2>
    29  
    30  <p>
    31  The latest Go release, version 1.7, arrives six months after 1.6.
    32  Most of its changes are in the implementation of the toolchain, runtime, and libraries.
    33  There is one minor change to the language specification.
    34  As always, the release maintains the Go 1 <a href="/doc/go1compat.html">promise of compatibility</a>.
    35  We expect almost all Go programs to continue to compile and run as before.
    36  </p>
    37  
    38  <p>
    39  The release <a href="#ports">adds a port to IBM LinuxOne</a>;
    40  <a href="#compiler">updates the x86-64 compiler back end</a> to generate more efficient code;
    41  includes the <a href="#context">context package</a>, promoted from the
    42  <a href="https://golang.org/x/net/context">x/net subrepository</a>
    43  and now used in the standard library;
    44  and <a href="#testing">adds support in the testing package</a> for
    45  creating hierarchies of tests and benchmarks.
    46  The release also <a href="#cmd/go">finalizes the vendoring support</a>
    47  started in Go 1.5, making it a standard feature.
    48  </p>
    49  
    50  <h2 id="language">Changes to the language</h2>
    51  
    52  <p>
    53  There is one tiny language change in this release.
    54  The section on <a href="/ref/spec#Terminating_statements">terminating statements</a>
    55  clarifies that to determine whether a statement list ends in a terminating statement,
    56  the “final non-empty statement” is considered the end,
    57  matching the existing behavior of the gc and gccgo compiler toolchains.
    58  In earlier releases the definition referred only to the “final statement,”
    59  leaving the effect of trailing empty statements at the least unclear.
    60  The <a href="/pkg/go/types/"><code>go/types</code></a>
    61  package has been updated to match the gc and gccgo compiler toolchains
    62  in this respect.
    63  This change has no effect on the correctness of existing programs.
    64  </p>
    65  
    66  <h2 id="ports">Ports</h2>
    67  
    68  <p>
    69  Go 1.7 adds support for macOS 10.12 Sierra.
    70  Binaries built with versions of Go before 1.7 will not work
    71  correctly on Sierra.
    72  </p>
    73  
    74  <p>
    75  Go 1.7 adds an experimental port to <a href="https://en.wikipedia.org/wiki/Linux_on_z_Systems">Linux on z Systems</a> (<code>linux/s390x</code>)
    76  and the beginning of a port to Plan 9 on ARM (<code>plan9/arm</code>).
    77  </p>
    78  
    79  <p>
    80  The experimental ports to Linux on 64-bit MIPS (<code>linux/mips64</code> and <code>linux/mips64le</code>)
    81  added in Go 1.6 now have full support for cgo and external linking.
    82  </p>
    83  
    84  <p>
    85  The experimental port to Linux on little-endian 64-bit PowerPC (<code>linux/ppc64le</code>)
    86  now requires the POWER8 architecture or later.
    87  Big-endian 64-bit PowerPC (<code>linux/ppc64</code>) only requires the
    88  POWER5 architecture.
    89  </p>
    90  
    91  <p>
    92  The OpenBSD port now requires OpenBSD 5.6 or later, for access to the <a href="http://man.openbsd.org/getentropy.2"><i>getentropy</i>(2)</a> system call.
    93  </p>
    94  
    95  <h3 id="known_issues">Known Issues</h3>
    96  
    97  <p>
    98  There are some instabilities on FreeBSD that are known but not understood.
    99  These can lead to program crashes in rare cases.
   100  See <a href="https://golang.org/issue/16136">issue 16136</a>,
   101  <a href="https://golang.org/issue/15658">issue 15658</a>,
   102  and <a href="https://golang.org/issue/16396">issue 16396</a>.
   103  Any help in solving these FreeBSD-specific issues would be appreciated.
   104  </p>
   105  
   106  <h2 id="tools">Tools</h2>
   107  
   108  <h3 id="cmd_asm">Assembler</h3>
   109  
   110  <p>
   111  For 64-bit ARM systems, the vector register names have been
   112  corrected to <code>V0</code> through <code>V31</code>;
   113  previous releases incorrectly referred to them as <code>V32</code> through <code>V63</code>.
   114  </p>
   115  
   116  <p>
   117  For 64-bit x86 systems, the following instructions have been added:
   118  <code>PCMPESTRI</code>,
   119  <code>RORXL</code>,
   120  <code>RORXQ</code>,
   121  <code>VINSERTI128</code>,
   122  <code>VPADDD</code>,
   123  <code>VPADDQ</code>,
   124  <code>VPALIGNR</code>,
   125  <code>VPBLENDD</code>,
   126  <code>VPERM2F128</code>,
   127  <code>VPERM2I128</code>,
   128  <code>VPOR</code>,
   129  <code>VPSHUFB</code>,
   130  <code>VPSHUFD</code>,
   131  <code>VPSLLD</code>,
   132  <code>VPSLLDQ</code>,
   133  <code>VPSLLQ</code>,
   134  <code>VPSRLD</code>,
   135  <code>VPSRLDQ</code>,
   136  and
   137  <code>VPSRLQ</code>.
   138  </p>
   139  
   140  <h3 id="compiler">Compiler Toolchain</h3>
   141  
   142  <p>
   143  This release includes a new code generation back end for 64-bit x86 systems,
   144  following a <a href="https://golang.org/s/go17ssa">proposal from 2015</a>
   145  that has been under development since then.
   146  The new back end, based on
   147  <a href="https://en.wikipedia.org/wiki/Static_single_assignment_form">SSA</a>,
   148  generates more compact, more efficient code
   149  and provides a better platform for optimizations
   150  such as bounds check elimination.
   151  The new back end reduces the CPU time required by
   152  <a href="https://golang.org/test/bench/go1/">our benchmark programs</a> by 5-35%.
   153  </p>
   154  
   155  <p>
   156  For this release, the new back end can be disabled by passing
   157  <code>-ssa=0</code> to the compiler.
   158  If you find that your program compiles or runs successfully
   159  only with the new back end disabled, please
   160  <a href="https://golang.org/issue/new">file a bug report</a>.
   161  </p>
   162  
   163  <p>
   164  The format of exported metadata written by the compiler in package archives has changed:
   165  the old textual format has been replaced by a more compact binary format.
   166  This results in somewhat smaller package archives and fixes a few
   167  long-standing corner case bugs.
   168  </p>
   169  
   170  <p>
   171  For this release, the new export format can be disabled by passing
   172  <code>-newexport=0</code> to the compiler.
   173  If you find that your program compiles or runs successfully
   174  only with the new export format disabled, please
   175  <a href="https://golang.org/issue/new">file a bug report</a>.
   176  </p>
   177  
   178  <p>
   179  The linker's <code>-X</code> option no longer supports the unusual two-argument form
   180  <code>-X</code> <code>name</code> <code>value</code>,
   181  as <a href="/doc/go1.6#compiler">announced</a> in the Go 1.6 release
   182  and in warnings printed by the linker.
   183  Use <code>-X</code> <code>name=value</code> instead.
   184  </p>
   185  
   186  <p>
   187  The compiler and linker have been optimized and run significantly faster in this release than in Go 1.6,
   188  although they are still slower than we would like and will continue to be optimized in future releases.
   189  </p>
   190  
   191  <p>
   192  Due to changes across the compiler toolchain and standard library,
   193  binaries built with this release should typically be smaller than binaries
   194  built with Go 1.6,
   195  sometimes by as much as 20-30%.
   196  </p>
   197  
   198  <p>
   199  On x86-64 systems, Go programs now maintain stack frame pointers
   200  as expected by profiling tools like Linux's perf and Intel's VTune,
   201  making it easier to analyze and optimize Go programs using these tools.
   202  The frame pointer maintenance has a small run-time overhead that varies
   203  but averages around 2%. We hope to reduce this cost in future releases.
   204  To build a toolchain that does not use frame pointers, set
   205  <code>GOEXPERIMENT=noframepointer</code> when running
   206  <code>make.bash</code>, <code>make.bat</code>, or <code>make.rc</code>.
   207  </p>
   208  
   209  <h3 id="cmd_cgo">Cgo</h3>
   210  
   211  <p>
   212  Packages using <a href="/cmd/cgo/">cgo</a> may now include
   213  Fortran source files (in addition to C, C++, Objective C, and SWIG),
   214  although the Go bindings must still use C language APIs.
   215  </p>
   216  
   217  <p>
   218  Go bindings may now use a new helper function <code>C.CBytes</code>.
   219  In contrast to <code>C.CString</code>, which takes a Go <code>string</code>
   220  and returns a <code>*C.byte</code> (a C <code>char*</code>),
   221  <code>C.CBytes</code> takes a Go <code>[]byte</code>
   222  and returns an <code>unsafe.Pointer</code> (a C <code>void*</code>).
   223  </p>
   224  
   225  <p>
   226  Packages and binaries built using <code>cgo</code> have in past releases
   227  produced different output on each build,
   228  due to the embedding of temporary directory names.
   229  When using this release with
   230  new enough versions of GCC or Clang
   231  (those that support the <code>-fdebug-prefix-map</code> option),
   232  those builds should finally be deterministic.
   233  </p>
   234  
   235  <h3 id="gccgo">Gccgo</h3>
   236  
   237  <p>
   238  Due to the alignment of Go's semiannual release schedule with GCC's annual release schedule,
   239  GCC release 6 contains the Go 1.6.1 version of gccgo.
   240  The next release, GCC 7, will likely have the Go 1.8 version of gccgo.
   241  </p>
   242  
   243  <h3 id="cmd_go">Go command</h3>
   244  
   245  <p>
   246  The <a href="/cmd/go/"><code>go</code></a> command's basic operation
   247  is unchanged, but there are a number of changes worth noting.
   248  </p>
   249  
   250  <p>
   251  This release removes support for the <code>GO15VENDOREXPERIMENT</code> environment variable,
   252  as <a href="/doc/go1.6#go_command">announced</a> in the Go 1.6 release.
   253  <a href="https://golang.org/s/go15vendor">Vendoring support</a>
   254  is now a standard feature of the <code>go</code> command and toolchain.
   255  </p>
   256  
   257  <p>
   258  The <code>Package</code> data structure made available to
   259  “<code>go</code> <code>list</code>” now includes a
   260  <code>StaleReason</code> field explaining why a particular package
   261  is or is not considered stale (in need of rebuilding).
   262  This field is available to the <code>-f</code> or <code>-json</code>
   263  options and is useful for understanding why a target is being rebuilt.
   264  </p>
   265  
   266  <p>
   267  The “<code>go</code> <code>get</code>” command now supports
   268  import paths referring to <code>git.openstack.org</code>.
   269  </p>
   270  
   271  <p>
   272  This release adds experimental, minimal support for building programs using
   273  <a href="/pkg/go/build#hdr-Binary_Only_Packages">binary-only packages</a>,
   274  packages distributed in binary form
   275  without the corresponding source code.
   276  This feature is needed in some commercial settings
   277  but is not intended to be fully integrated into the rest of the toolchain.
   278  For example, tools that assume access to complete source code
   279  will not work with such packages, and there are no plans to support
   280  such packages in the “<code>go</code> <code>get</code>” command.
   281  </p>
   282  
   283  <h3 id="cmd_doc">Go doc</h3>
   284  
   285  <p>
   286  The “<code>go</code> <code>doc</code>” command
   287  now groups constructors with the type they construct,
   288  following <a href="/cmd/godoc/"><code>godoc</code></a>.
   289  </p>
   290  
   291  <h3 id="cmd_vet">Go vet</h3>
   292  
   293  <p>
   294  The “<code>go</code> <code>vet</code>” command
   295  has more accurate analysis in its <code>-copylock</code> and <code>-printf</code> checks,
   296  and a new <code>-tests</code> check that checks the name and signature of likely test functions.
   297  To avoid confusion with the new <code>-tests</code> check, the old, unadvertised
   298  <code>-test</code> option has been removed; it was equivalent to <code>-all</code> <code>-shadow</code>.
   299  </p>
   300  
   301  <p id="vet_lostcancel">
   302  The <code>vet</code> command also has a new check,
   303  <code>-lostcancel</code>, which detects failure to call the
   304  cancelation function returned by the <code>WithCancel</code>,
   305  <code>WithTimeout</code>, and <code>WithDeadline</code> functions in
   306  Go 1.7's new <code>context</code> package (see <a
   307  href='#context'>below</a>).
   308  Failure to call the function prevents the new <code>Context</code>
   309  from being reclaimed until its parent is cancelled.
   310  (The background context is never cancelled.)
   311  </p>
   312  
   313  <h3 id="cmd_dist">Go tool dist</h3>
   314  
   315  <p>
   316  The new subcommand “<code>go</code> <code>tool</code> <code>dist</code> <code>list</code>”
   317  prints all supported operating system/architecture pairs.
   318  </p>
   319  
   320  <h3 id="cmd_trace">Go tool trace</h3>
   321  
   322  <p>
   323  The “<code>go</code> <code>tool</code> <code>trace</code>” command,
   324  <a href="/doc/go1.5#trace_command">introduced in Go 1.5</a>,
   325  has been refined in various ways.
   326  </p>
   327  
   328  <p>
   329  First, collecting traces is significantly more efficient than in past releases.
   330  In this release, the typical execution-time overhead of collecting a trace is about 25%;
   331  in past releases it was at least 400%.
   332  Second, trace files now include file and line number information,
   333  making them more self-contained and making the
   334  original executable optional when running the trace tool.
   335  Third, the trace tool now breaks up large traces to avoid limits
   336  in the browser-based viewer.
   337  </p>
   338  
   339  <p>
   340  Although the trace file format has changed in this release,
   341  the Go 1.7 tools can still read traces from earlier releases.
   342  </p>
   343  
   344  <h2 id="performance">Performance</h2>
   345  
   346  <p>
   347  As always, the changes are so general and varied that precise statements
   348  about performance are difficult to make.
   349  Most programs should run a bit faster,
   350  due to speedups in the garbage collector and
   351  optimizations in the core library.
   352  On x86-64 systems, many programs will run significantly faster,
   353  due to improvements in generated code brought by the
   354  new compiler back end.
   355  As noted above, in our own benchmarks,
   356  the code generation changes alone typically reduce program CPU time by 5-35%.
   357  </p>
   358  
   359  <p>
   360  <!-- git log -''-grep '-[0-9][0-9]\.[0-9][0-9]%' go1.6.. -->
   361  There have been significant optimizations bringing more than 10% improvements
   362  to implementations in the
   363  <a href="/pkg/crypto/sha1/"><code>crypto/sha1</code></a>,
   364  <a href="/pkg/crypto/sha256/"><code>crypto/sha256</code></a>,
   365  <a href="/pkg/encoding/binary/"><code>encoding/binary</code></a>,
   366  <a href="/pkg/fmt/"><code>fmt</code></a>,
   367  <a href="/pkg/hash/adler32/"><code>hash/adler32</code></a>,
   368  <a href="/pkg/hash/crc32/"><code>hash/crc32</code></a>,
   369  <a href="/pkg/hash/crc64/"><code>hash/crc64</code></a>,
   370  <a href="/pkg/image/color/"><code>image/color</code></a>,
   371  <a href="/pkg/math/big/"><code>math/big</code></a>,
   372  <a href="/pkg/strconv/"><code>strconv</code></a>,
   373  <a href="/pkg/strings/"><code>strings</code></a>,
   374  <a href="/pkg/unicode/"><code>unicode</code></a>,
   375  and
   376  <a href="/pkg/unicode/utf16/"><code>unicode/utf16</code></a>
   377  packages.
   378  </p>
   379  
   380  <p>
   381  Garbage collection pauses should be significantly shorter than they
   382  were in Go 1.6 for programs with large numbers of idle goroutines,
   383  substantial stack size fluctuation, or large package-level variables.
   384  </p>
   385  
   386  <h2 id="library">Core library</h2>
   387  
   388  <h3 id="context">Context</h3>
   389  
   390  <p>
   391  Go 1.7 moves the <code>golang.org/x/net/context</code> package
   392  into the standard library as <a href="/pkg/context/"><code>context</code></a>.
   393  This allows the use of contexts for cancelation, timeouts, and passing
   394  request-scoped data in other standard library packages,
   395  including
   396  <a href="#net">net</a>,
   397  <a href="#net/http">net/http</a>,
   398  and
   399  <a href="#os/exec">os/exec</a>,
   400  as noted below.
   401  </p>
   402  
   403  <p>
   404  For more information about contexts, see the
   405  <a href="/pkg/context/">package documentation</a>
   406  and the Go blog post
   407  “<a href="https://blog.golang.org/context">Go Concurrent Patterns: Context</a>.”
   408  </p>
   409  
   410  <h3 id="httptrace">HTTP Tracing</h3>
   411  
   412  <p>
   413  Go 1.7 introduces <a href="/pkg/net/http/httptrace/"><code>net/http/httptrace</code></a>,
   414  a package that provides mechanisms for tracing events within HTTP requests.
   415  </p>
   416  
   417  <h3 id="testing">Testing</h3>
   418  
   419  <p>
   420  The <code>testing</code> package now supports the definition
   421  of tests with subtests and benchmarks with sub-benchmarks.
   422  This support makes it easy to write table-driven benchmarks
   423  and to create hierarchical tests.
   424  It also provides a way to share common setup and tear-down code.
   425  See the <a href="/pkg/testing/#hdr-Subtests_and_Sub_benchmarks">package documentation</a> for details.
   426  </p>
   427  
   428  <h3 id="runtime">Runtime</h3>
   429  
   430  <p>
   431  All panics started by the runtime now use panic values
   432  that implement both the
   433  builtin <a href="/ref/spec#Errors"><code>error</code></a>,
   434  and
   435  <a href="/pkg/runtime/#Error"><code>runtime.Error</code></a>,
   436  as
   437  <a href="/ref/spec#Run_time_panics">required by the language specification</a>.
   438  </p>
   439  
   440  <p>
   441  During panics, if a signal's name is known, it will be printed in the stack trace.
   442  Otherwise, the signal's number will be used, as it was before Go1.7.
   443  </p>
   444  
   445  <p>
   446  The new function
   447  <a href="/pkg/runtime/#KeepAlive"><code>KeepAlive</code></a>
   448  provides an explicit mechanism for declaring
   449  that an allocated object must be considered reachable
   450  at a particular point in a program,
   451  typically to delay the execution of an associated finalizer.
   452  </p>
   453  
   454  <p>
   455  The new function
   456  <a href="/pkg/runtime/#CallersFrames"><code>CallersFrames</code></a>
   457  translates a PC slice obtained from
   458  <a href="/pkg/runtime/#Callers"><code>Callers</code></a>
   459  into a sequence of frames corresponding to the call stack.
   460  This new API should be preferred instead of direct use of
   461  <a href="/pkg/runtime/#FuncForPC"><code>FuncForPC</code></a>,
   462  because the frame sequence can more accurately describe
   463  call stacks with inlined function calls.
   464  </p>
   465  
   466  <p>
   467  The new function
   468  <a href="/pkg/runtime/#SetCgoTraceback"><code>SetCgoTraceback</code></a>
   469  facilitates tighter integration between Go and C code executing
   470  in the same process called using cgo.
   471  </p>
   472  
   473  <p>
   474  On 32-bit systems, the runtime can now use memory allocated
   475  by the operating system anywhere in the address space,
   476  eliminating the
   477  “memory allocated by OS not in usable range” failure
   478  common in some environments.
   479  </p>
   480  
   481  <p>
   482  The runtime can now return unused memory to the operating system on
   483  all architectures.
   484  In Go 1.6 and earlier, the runtime could not
   485  release memory on ARM64, 64-bit PowerPC, or MIPS.
   486  </p>
   487  
   488  <p>
   489  On Windows, Go programs in Go 1.5 and earlier forced
   490  the global Windows timer resolution to 1ms at startup
   491  by calling <code>timeBeginPeriod(1)</code>.
   492  Changing the global timer resolution caused problems on some systems,
   493  and testing suggested that the call was not needed for good scheduler performance,
   494  so Go 1.6 removed the call.
   495  Go 1.7 brings the call back: under some workloads the call
   496  is still needed for good scheduler performance.
   497  </p>
   498  
   499  
   500  <h3 id="minor_library_changes">Minor changes to the library</h3>
   501  
   502  <p>
   503  As always, there are various minor changes and updates to the library,
   504  made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a>
   505  in mind.
   506  </p>
   507  
   508  <dl id="bufio"><dt><a href="/pkg/bufio/">bufio</a></dt>
   509  
   510  <dd>
   511  <p>
   512  In previous releases of Go, if
   513  <a href="/pkg/bufio/#Reader"><code>Reader</code></a>'s
   514  <a href="/pkg/bufio/#Reader.Peek"><code>Peek</code></a> method
   515  were asked for more bytes than fit in the underlying buffer,
   516  it would return an empty slice and the error <code>ErrBufferFull</code>.
   517  Now it returns the entire underlying buffer, still accompanied by the error <code>ErrBufferFull</code>.
   518  </p>
   519  </dd>
   520  </dl>
   521  
   522  <dl id="bytes"><dt><a href="/pkg/bytes/">bytes</a></dt>
   523  
   524  <dd>
   525  <p>
   526  The new functions
   527  <a href="/pkg/bytes/#ContainsAny"><code>ContainsAny</code></a> and
   528  <a href="/pkg/bytes/#ContainsRune"><code>ContainsRune</code></a>
   529  have been added for symmetry with
   530  the <a href="/pkg/strings/"><code>strings</code></a> package.
   531  </p>
   532  
   533  <p>
   534  In previous releases of Go, if
   535  <a href="/pkg/bytes/#Reader"><code>Reader</code></a>'s
   536  <a href="/pkg/bytes/#Reader.Read"><code>Read</code></a> method
   537  were asked for zero bytes with no data remaining, it would
   538  return a count of 0 and no error.
   539  Now it returns a count of 0 and the error
   540  <a href="/pkg/io/#EOF"><code>io.EOF</code></a>.
   541  </p>
   542  
   543  <p>
   544  The
   545  <a href="/pkg/bytes/#Reader"><code>Reader</code></a> type has a new method
   546  <a href="/pkg/bytes/#Reader.Reset"><code>Reset</code></a> to allow reuse of a <code>Reader</code>.
   547  </p>
   548  </dd>
   549  </dl>
   550  
   551  <dl id="compress_flate"><dt><a href="/pkg/compress/flate/">compress/flate</a></dt>
   552  
   553  <dd>
   554  <p>
   555  There are many performance optimizations throughout the package.
   556  Decompression speed is improved by about 10%,
   557  while compression for <code>DefaultCompression</code> is twice as fast.
   558  </p>
   559  
   560  <p>
   561  In addition to those general improvements,
   562  the
   563  <code>BestSpeed</code>
   564  compressor has been replaced entirely and uses an
   565  algorithm similar to <a href="https://github.com/google/snappy">Snappy</a>,
   566  resulting in about a 2.5X speed increase,
   567  although the output can be 5-10% larger than with the previous algorithm.
   568  </p>
   569  
   570  <p>
   571  There is also a new compression level
   572  <code>HuffmanOnly</code>
   573  that applies Huffman but not Lempel-Ziv encoding.
   574  <a href="https://blog.klauspost.com/constant-time-gzipzip-compression/">Forgoing Lempel-Ziv encoding</a> means that
   575  <code>HuffmanOnly</code> runs about 3X faster than the new <code>BestSpeed</code>
   576  but at the cost of producing compressed outputs that are 20-40% larger than those
   577  generated by the new <code>BestSpeed</code>.
   578  </p>
   579  
   580  <p>
   581  It is important to note that both
   582  <code>BestSpeed</code> and <code>HuffmanOnly</code> produce a compressed output that is
   583  <a href="https://tools.ietf.org/html/rfc1951">RFC 1951</a> compliant.
   584  In other words, any valid DEFLATE decompressor will continue to be able to decompress these outputs.
   585  </p>
   586  
   587  <p>
   588  Lastly, there is a minor change to the decompressor's implementation of
   589  <a href="/pkg/io/#Reader"><code>io.Reader</code></a>. In previous versions,
   590  the decompressor deferred reporting
   591  <a href="/pkg/io/#EOF"><code>io.EOF</code></a> until exactly no more bytes could be read.
   592  Now, it reports
   593  <a href="/pkg/io/#EOF"><code>io.EOF</code></a> more eagerly when reading the last set of bytes.
   594  </p>
   595  </dd>
   596  </dl>
   597  
   598  <dl id="crypto_tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
   599  
   600  <dd>
   601  <p>
   602  The TLS implementation sends the first few data packets on each connection
   603  using small record sizes, gradually increasing to the TLS maximum record size.
   604  This heuristic reduces the amount of data that must be received before
   605  the first packet can be decrypted, improving communication latency over
   606  low-bandwidth networks.
   607  Setting
   608  <a href="/pkg/crypto/tls/#Config"><code>Config</code></a>'s
   609  <code>DynamicRecordSizingDisabled</code> field to true
   610  forces the behavior of Go 1.6 and earlier, where packets are
   611  as large as possible from the start of the connection.
   612  </p>
   613  
   614  <p>
   615  The TLS client now has optional, limited support for server-initiated renegotiation,
   616  enabled by setting the
   617  <a href="/pkg/crypto/tls/#Config"><code>Config</code></a>'s
   618  <code>Renegotiation</code> field.
   619  This is needed for connecting to many Microsoft Azure servers.
   620  </p>
   621  
   622  <p>
   623  The errors returned by the package now consistently begin with a
   624  <code>tls:</code> prefix.
   625  In past releases, some errors used a <code>crypto/tls:</code> prefix,
   626  some used a <code>tls:</code> prefix, and some had no prefix at all.
   627  </p>
   628  
   629  <p>
   630  When generating self-signed certificates, the package no longer sets the
   631  “Authority Key Identifier” field by default.
   632  </p>
   633  </dd>
   634  </dl>
   635  
   636  <dl id="crypto_x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
   637  
   638  <dd>
   639  <p>
   640  The new function
   641  <a href="/pkg/crypto/x509/#SystemCertPool"><code>SystemCertPool</code></a>
   642  provides access to the entire system certificate pool if available.
   643  There is also a new associated error type
   644  <a href="/pkg/crypto/x509/#SystemRootsError"><code>SystemRootsError</code></a>.
   645  </p>
   646  </dd>
   647  </dl>
   648  
   649  <dl id="debug_dwarf"><dt><a href="/pkg/debug/dwarf/">debug/dwarf</a></dt>
   650  
   651  <dd>
   652  <p>
   653  The
   654  <a href="/pkg/debug/dwarf/#Reader"><code>Reader</code></a> type's new
   655  <a href="/pkg/debug/dwarf/#Reader.SeekPC"><code>SeekPC</code></a> method and the
   656  <a href="/pkg/debug/dwarf/#Data"><code>Data</code></a> type's new
   657  <a href="/pkg/debug/dwarf/#Ranges"><code>Ranges</code></a> method
   658  help to find the compilation unit to pass to a
   659  <a href="/pkg/debug/dwarf/#LineReader"><code>LineReader</code></a>
   660  and to identify the specific function for a given program counter.
   661  </p>
   662  </dd>
   663  </dl>
   664  
   665  <dl id="debug_elf"><dt><a href="/pkg/debug/elf/">debug/elf</a></dt>
   666  
   667  <dd>
   668  <p>
   669  The new
   670  <a href="/pkg/debug/elf/#R_390"><code>R_390</code></a> relocation type
   671  and its many predefined constants
   672  support the S390 port.
   673  </p>
   674  </dd>
   675  </dl>
   676  
   677  <dl id="encoding_asn1"><dt><a href="/pkg/encoding/asn1/">encoding/asn1</a></dt>
   678  
   679  <dd>
   680  <p>
   681  The ASN.1 decoder now rejects non-minimal integer encodings.
   682  This may cause the package to reject some invalid but formerly accepted ASN.1 data.
   683  </p>
   684  </dd>
   685  </dl>
   686  
   687  <dl id="encoding_json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
   688  
   689  <dd>
   690  <p>
   691  The
   692  <a href="/pkg/encoding/json/#Encoder"><code>Encoder</code></a>'s new
   693  <a href="/pkg/encoding/json/#Encoder.SetIndent"><code>SetIndent</code></a> method
   694  sets the indentation parameters for JSON encoding,
   695  like in the top-level
   696  <a href="/pkg/encoding/json/#Indent"><code>Indent</code></a> function.
   697  </p>
   698  
   699  <p>
   700  The
   701  <a href="/pkg/encoding/json/#Encoder"><code>Encoder</code></a>'s new
   702  <a href="/pkg/encoding/json/#Encoder.SetEscapeHTML"><code>SetEscapeHTML</code></a> method
   703  controls whether the
   704  <code>&#x26;</code>, <code>&#x3c;</code>, and <code>&#x3e;</code>
   705  characters in quoted strings should be escaped as
   706  <code>\u0026</code>, <code>\u003c</code>, and <code>\u003e</code>,
   707  respectively.
   708  As in previous releases, the encoder defaults to applying this escaping,
   709  to avoid certain problems that can arise when embedding JSON in HTML.
   710  </p>
   711  
   712  <p>
   713  In earlier versions of Go, this package only supported encoding and decoding
   714  maps using keys with string types.
   715  Go 1.7 adds support for maps using keys with integer types:
   716  the encoding uses a quoted decimal representation as the JSON key.
   717  Go 1.7 also adds support for encoding maps using non-string keys that implement
   718  the <code>MarshalText</code>
   719  (see
   720  <a href="/pkg/encoding/#TextMarshaler"><code>encoding.TextMarshaler</code></a>)
   721  method,
   722  as well as support for decoding maps using non-string keys that implement
   723  the <code>UnmarshalText</code>
   724  (see
   725  <a href="/pkg/encoding/#TextUnmarshaler"><code>encoding.TextUnmarshaler</code></a>)
   726  method.
   727  These methods are ignored for keys with string types in order to preserve
   728  the encoding and decoding used in earlier versions of Go.
   729  </p>
   730  
   731  <p>
   732  When encoding a slice of typed bytes,
   733  <a href="/pkg/encoding/json/#Marshal"><code>Marshal</code></a>
   734  now generates an array of elements encoded using
   735  that byte type's
   736  <code>MarshalJSON</code>
   737  or
   738  <code>MarshalText</code>
   739  method if present,
   740  only falling back to the default base64-encoded string data if neither method is available.
   741  Earlier versions of Go accept both the original base64-encoded string encoding
   742  and the array encoding (assuming the byte type also implements
   743  <code>UnmarshalJSON</code>
   744  or
   745  <code>UnmarshalText</code>
   746  as appropriate),
   747  so this change should be semantically backwards compatible with earlier versions of Go,
   748  even though it does change the chosen encoding.
   749  </p>
   750  </dd>
   751  </dl>
   752  
   753  <dl id="go_build"><dt><a href="/pkg/go/build/">go/build</a></dt>
   754  
   755  <dd>
   756  <p>
   757  To implement the go command's new support for binary-only packages
   758  and for Fortran code in cgo-based packages,
   759  the
   760  <a href="/pkg/go/build/#Package"><code>Package</code></a> type
   761  adds new fields <code>BinaryOnly</code>, <code>CgoFFLAGS</code>, and <code>FFiles</code>.
   762  </p>
   763  </dd>
   764  </dl>
   765  
   766  <dl id="go_doc"><dt><a href="/pkg/go/doc/">go/doc</a></dt>
   767  
   768  <dd>
   769  <p>
   770  To support the corresponding change in <code>go</code> <code>test</code> described above,
   771  <a href="/pkg/go/doc/#Example"><code>Example</code></a> struct adds a Unordered field
   772  indicating whether the example may generate its output lines in any order.
   773  </p>
   774  </dd>
   775  </dl>
   776  
   777  <dl id="io"><dt><a href="/pkg/io/">io</a></dt>
   778  
   779  <dd>
   780  <p>
   781  The package adds new constants
   782  <code>SeekStart</code>, <code>SeekCurrent</code>, and <code>SeekEnd</code>,
   783  for use with
   784  <a href="/pkg/io/#Seeker"><code>Seeker</code></a>
   785  implementations.
   786  These constants are preferred over <code>os.SEEK_SET</code>, <code>os.SEEK_CUR</code>, and <code>os.SEEK_END</code>,
   787  but the latter will be preserved for compatibility.
   788  </p>
   789  </dd>
   790  </dl>
   791  
   792  <dl id="math_big"><dt><a href="/pkg/math/big/">math/big</a></dt>
   793  
   794  <dd>
   795  <p>
   796  The
   797  <a href="/pkg/math/big/#Float"><code>Float</code></a> type adds
   798  <a href="/pkg/math/big/#Float.GobEncode"><code>GobEncode</code></a> and
   799  <a href="/pkg/math/big/#Float.GobDecode"><code>GobDecode</code></a> methods,
   800  so that values of type <code>Float</code> can now be encoded and decoded using the
   801  <a href="/pkg/encoding/gob/"><code>encoding/gob</code></a>
   802  package.
   803  </p>
   804  </dd>
   805  </dl>
   806  
   807  <dl id="math_rand"><dt><a href="/pkg/math/rand/">math/rand</a></dt>
   808  
   809  <dd>
   810  <p>
   811  The
   812  <a href="/pkg/math/rand/#Read"><code>Read</code></a> function and
   813  <a href="/pkg/math/rand/#Rand"><code>Rand</code></a>'s
   814  <a href="/pkg/math/rand/#Rand.Read"><code>Read</code></a> method
   815  now produce a pseudo-random stream of bytes that is consistent and not
   816  dependent on the size of the input buffer.
   817  </p>
   818  
   819  <p>
   820  The documentation clarifies that
   821  Rand's <a href="/pkg/math/rand/#Rand.Seed"><code>Seed</code></a>
   822  and <a href="/pkg/math/rand/#Rand.Read"><code>Read</code></a> methods
   823  are not safe to call concurrently, though the global
   824  functions <a href="/pkg/math/rand/#Seed"><code>Seed</code></a>
   825  and <a href="/pkg/math/rand/#Read"><code>Read</code></a> are (and have
   826  always been) safe.
   827  </p>
   828  </dd>
   829  </dl>
   830  
   831  <dl id="mime_multipart"><dt><a href="/pkg/mime/multipart/">mime/multipart</a></dt>
   832  
   833  <dd>
   834  <p>
   835  The
   836  <a href="/pkg/mime/multipart/#Writer"><code>Writer</code></a>
   837  implementation now emits each multipart section's header sorted by key.
   838  Previously, iteration over a map caused the section header to use a
   839  non-deterministic order.
   840  </p>
   841  </dd>
   842  </dl>
   843  
   844  <dl id="net"><dt><a href="/pkg/net/">net</a></dt>
   845  
   846  <dd>
   847  <p>
   848  As part of the introduction of <a href="#context">context</a>, the
   849  <a href="/pkg/net/#Dialer"><code>Dialer</code></a> type has a new method
   850  <a href="/pkg/net/#Dialer.DialContext"><code>DialContext</code></a>, like
   851  <a href="/pkg/net/#Dialer.Dial"><code>Dial</code></a> but adding the
   852  <a href="/pkg/context/#Context"><code>context.Context</code></a>
   853  for the dial operation.
   854  The context is intended to obsolete the <code>Dialer</code>'s
   855  <code>Cancel</code> and <code>Deadline</code> fields,
   856  but the implementation continues to respect them,
   857  for backwards compatibility.
   858  </p>
   859  
   860  <p>
   861  The
   862  <a href="/pkg/net/#IP"><code>IP</code></a> type's
   863  <a href="/pkg/net/#IP.String"><code>String</code></a> method has changed its result for invalid <code>IP</code> addresses.
   864  In past releases, if an <code>IP</code> byte slice had length other than 0, 4, or 16, <code>String</code>
   865  returned <code>"?"</code>.
   866  Go 1.7 adds the hexadecimal encoding of the bytes, as in <code>"?12ab"</code>.
   867  </p>
   868  
   869  <p>
   870  The pure Go <a href="/pkg/net/#hdr-Name_Resolution">name resolution</a>
   871  implementation now respects <code>nsswitch.conf</code>'s
   872  stated preference for the priority of DNS lookups compared to
   873  local file (that is, <code>/etc/hosts</code>) lookups.
   874  </p>
   875  </dd>
   876  </dl>
   877  
   878  <dl id="net_http"><dt><a href="/pkg/net/http/">net/http</a></dt>
   879  
   880  <dd>
   881  <p>
   882  <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>'s
   883  documentation now makes clear that beginning to write the response
   884  may prevent future reads on the request body.
   885  For maximal compatibility, implementations are encouraged to
   886  read the request body completely before writing any part of the response.
   887  </p>
   888  
   889  <p>
   890  As part of the introduction of <a href="#context">context</a>, the
   891  <a href="/pkg/net/http/#Request"><code>Request</code></a> has a new methods
   892  <a href="/pkg/net/http/#Request.Context"><code>Context</code></a>, to retrieve the associated context, and
   893  <a href="/pkg/net/http/#Request.WithContext"><code>WithContext</code></a>, to construct a copy of <code>Request</code>
   894  with a modified context.
   895  </p>
   896  
   897  <p>
   898  In the
   899  <a href="/pkg/net/http/#Server"><code>Server</code></a> implementation,
   900  <a href="/pkg/net/http/#Server.Serve"><code>Serve</code></a> records in the request context
   901  both the underlying <code>*Server</code> using the key <code>ServerContextKey</code>
   902  and the local address on which the request was received (a
   903  <a href="/pkg/net/#Addr"><code>Addr</code></a>) using the key <code>LocalAddrContextKey</code>.
   904  For example, the address on which a request received is
   905  <code>req.Context().Value(http.LocalAddrContextKey).(net.Addr)</code>.
   906  </p>
   907  
   908  <p>
   909  The server's <a href="/pkg/net/http/#Server.Serve"><code>Serve</code></a> method
   910  now only enables HTTP/2 support if the <code>Server.TLSConfig</code> field is <code>nil</code>
   911  or includes <code>"h2"</code> in its <code>TLSConfig.NextProtos</code>.
   912  </p>
   913  
   914  <p>
   915  The server implementation now
   916  pads response codes less than 100 to three digits
   917  as required by the protocol,
   918  so that <code>w.WriteHeader(5)</code> uses the HTTP response
   919  status <code>005</code>, not just <code>5</code>.
   920  </p>
   921  
   922  <p>
   923  The server implementation now correctly sends only one "Transfer-Encoding" header when "chunked"
   924  is set explicitly, following <a href="https://tools.ietf.org/html/rfc7230#section-3.3.1">RFC 7230</a>.
   925  </p>
   926  
   927  <p>
   928  The server implementation is now stricter about rejecting requests with invalid HTTP versions.
   929  Invalid requests claiming to be HTTP/0.x are now rejected (HTTP/0.9 was never fully supported),
   930  and plaintext HTTP/2 requests other than the "PRI * HTTP/2.0" upgrade request are now rejected as well.
   931  The server continues to handle encrypted HTTP/2 requests.
   932  </p>
   933  
   934  <p>
   935  In the server, a 200 status code is sent back by the timeout handler on an empty
   936  response body, instead of sending back 0 as the status code.
   937  </p>
   938  
   939  <p>
   940  In the client, the
   941  <a href="/pkg/net/http/#Transport"><code>Transport</code></a> implementation passes the request context
   942  to any dial operation connecting to the remote server.
   943  If a custom dialer is needed, the new <code>Transport</code> field
   944  <code>DialContext</code> is preferred over the existing <code>Dial</code> field,
   945  to allow the transport to supply a context.
   946  </p>
   947  
   948  <p>
   949  The
   950  <a href="/pkg/net/http/#Transport"><code>Transport</code></a> also adds fields
   951  <code>IdleConnTimeout</code>,
   952  <code>MaxIdleConns</code>,
   953  and
   954  <code>MaxResponseHeaderBytes</code>
   955  to help control client resources consumed
   956  by idle or chatty servers.
   957  </p>
   958  
   959  <p>
   960  A
   961  <a href="/pkg/net/http/#Client"><code>Client</code></a>'s configured <code>CheckRedirect</code> function can now
   962  return <code>ErrUseLastResponse</code> to indicate that the
   963  most recent redirect response should be returned as the
   964  result of the HTTP request.
   965  That response is now available to the <code>CheckRedirect</code> function
   966  as <code>req.Response</code>.
   967  </p>
   968  
   969  <p>
   970  Since Go 1, the default behavior of the HTTP client is
   971  to request server-side compression
   972  using the <code>Accept-Encoding</code> request header
   973  and then to decompress the response body transparently,
   974  and this behavior is adjustable using the
   975  <a href="/pkg/net/http/#Transport"><code>Transport</code></a>'s <code>DisableCompression</code> field.
   976  In Go 1.7, to aid the implementation of HTTP proxies, the
   977  <a href="/pkg/net/http/#Response"><code>Response</code></a>'s new
   978  <code>Uncompressed</code> field reports whether
   979  this transparent decompression took place.
   980  </p>
   981  
   982  <p>
   983  <a href="/pkg/net/http/#DetectContentType"><code>DetectContentType</code></a>
   984  adds support for a few new audio and video content types.
   985  </p>
   986  </dd>
   987  </dl>
   988  
   989  <dl id="net_http_cgi"><dt><a href="/pkg/net/http/cgi/">net/http/cgi</a></dt>
   990  
   991  <dd>
   992  <p>
   993  The
   994  <a href="/pkg/net/http/cgi/#Handler"><code>Handler</code></a>
   995  adds a new field
   996  <code>Stderr</code>
   997  that allows redirection of the child process's
   998  standard error away from the host process's
   999  standard error.
  1000  </p>
  1001  </dd>
  1002  </dl>
  1003  
  1004  <dl id="net_http_httptest"><dt><a href="/pkg/net/http/httptest/">net/http/httptest</a></dt>
  1005  
  1006  <dd>
  1007  <p>
  1008  The new function
  1009  <a href="/pkg/net/http/httptest/#NewRequest"><code>NewRequest</code></a>
  1010  prepares a new
  1011  <a href="/pkg/net/http/#Request"><code>http.Request</code></a>
  1012  suitable for passing to an
  1013  <a href="/pkg/net/http/#Handler"><code>http.Handler</code></a> during a test.
  1014  </p>
  1015  
  1016  <p>
  1017  The
  1018  <a href="/pkg/net/http/httptest/#ResponseRecorder"><code>ResponseRecorder</code></a>'s new
  1019  <a href="/pkg/net/http/httptest/#ResponseRecorder.Result"><code>Result</code></a> method
  1020  returns the recorded
  1021  <a href="/pkg/net/http/#Response"><code>http.Response</code></a>.
  1022  Tests that need to check the response's headers or trailers
  1023  should call <code>Result</code> and inspect the response fields
  1024  instead of accessing
  1025  <code>ResponseRecorder</code>'s <code>HeaderMap</code> directly.
  1026  </p>
  1027  </dd>
  1028  </dl>
  1029  
  1030  <dl id="net_http_httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt>
  1031  
  1032  <dd>
  1033  <p>
  1034  The
  1035  <a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a> implementation now responds with “502 Bad Gateway”
  1036  when it cannot reach a back end; in earlier releases it responded with “500 Internal Server Error.”
  1037  </p>
  1038  
  1039  <p>
  1040  Both
  1041  <a href="/pkg/net/http/httputil/#ClientConn"><code>ClientConn</code></a> and
  1042  <a href="/pkg/net/http/httputil/#ServerConn"><code>ServerConn</code></a> have been documented as deprecated.
  1043  They are low-level, old, and unused by Go's current HTTP stack
  1044  and will no longer be updated.
  1045  Programs should use
  1046  <a href="/pkg/net/http/#Client"><code>http.Client</code></a>,
  1047  <a href="/pkg/net/http/#Transport"><code>http.Transport</code></a>,
  1048  and
  1049  <a href="/pkg/net/http/#Server"><code>http.Server</code></a>
  1050  instead.
  1051  </p>
  1052  </dd>
  1053  </dl>
  1054  
  1055  <dl id="net_http_pprof"><dt><a href="/pkg/net/http/pprof/">net/http/pprof</a></dt>
  1056  
  1057  <dd>
  1058  <p>
  1059  The runtime trace HTTP handler, installed to handle the path <code>/debug/pprof/trace</code>,
  1060  now accepts a fractional number in its <code>seconds</code> query parameter,
  1061  allowing collection of traces for intervals smaller than one second.
  1062  This is especially useful on busy servers.
  1063  </p>
  1064  </dd>
  1065  </dl>
  1066  
  1067  <dl><dt><a href="/pkg/net/mail/">net/mail</a></dt>
  1068  
  1069  <dd>
  1070  <p>
  1071  The address parser now allows unescaped UTF-8 text in addresses
  1072  following <a href="https://tools.ietf.org/html/rfc6532">RFC 6532</a>,
  1073  but it does not apply any normalization to the result.
  1074  For compatibility with older mail parsers,
  1075  the address encoder, namely
  1076  <a href="/pkg/net/mail/#Address"><code>Address</code></a>'s
  1077  <a href="/pkg/net/mail/#Address.String"><code>String</code></a> method,
  1078  continues to escape all UTF-8 text following <a href="https://tools.ietf.org/html/rfc5322">RFC 5322</a>.
  1079  </p>
  1080  
  1081  <p>
  1082  The <a href="/pkg/net/mail/#ParseAddress"><code>ParseAddress</code></a>
  1083  function and
  1084  the <a href="/pkg/net/mail/#AddressParser.Parse"><code>AddressParser.Parse</code></a>
  1085  method are stricter.
  1086  They used to ignore any characters following an e-mail address, but
  1087  will now return an error for anything other than whitespace.
  1088  </p>
  1089  </dd>
  1090  </dl>
  1091  
  1092  <dl id="net_url"><dt><a href="/pkg/net/url/">net/url</a></dt>
  1093  
  1094  <dd>
  1095  <p>
  1096  The
  1097  <a href="/pkg/net/url/#URL"><code>URL</code></a>'s
  1098  new <code>ForceQuery</code> field
  1099  records whether the URL must have a query string,
  1100  in order to distinguish URLs without query strings (like <code>/search</code>)
  1101  from URLs with empty query strings (like <code>/search?</code>).
  1102  </p>
  1103  </dd>
  1104  </dl>
  1105  
  1106  <dl id="os"><dt><a href="/pkg/os/">os</a></dt>
  1107  
  1108  <dd>
  1109  <p>
  1110  <a href="/pkg/os/#IsExist"><code>IsExist</code></a> now returns true for <code>syscall.ENOTEMPTY</code>,
  1111  on systems where that error exists.
  1112  </p>
  1113  
  1114  <p>
  1115  On Windows,
  1116  <a href="/pkg/os/#Remove"><code>Remove</code></a> now removes read-only files when possible,
  1117  making the implementation behave as on
  1118  non-Windows systems.
  1119  </p>
  1120  </dd>
  1121  </dl>
  1122  
  1123  <dl id="os_exec"><dt><a href="/pkg/os/exec/">os/exec</a></dt>
  1124  
  1125  <dd>
  1126  <p>
  1127  As part of the introduction of <a href="#context">context</a>,
  1128  the new constructor
  1129  <a href="/pkg/os/exec/#CommandContext"><code>CommandContext</code></a>
  1130  is like
  1131  <a href="/pkg/os/exec/#Command"><code>Command</code></a> but includes a context that can be used to cancel the command execution.
  1132  </p>
  1133  </dd>
  1134  </dl>
  1135  
  1136  <dl id="os_user"><dt><a href="/pkg/os/user/">os/user</a></dt>
  1137  
  1138  <dd>
  1139  <p>
  1140  The
  1141  <a href="/pkg/os/user/#Current"><code>Current</code></a>
  1142  function is now implemented even when cgo is not available.
  1143  </p>
  1144  
  1145  <p>
  1146  The new
  1147  <a href="/pkg/os/user/#Group"><code>Group</code></a> type,
  1148  along with the lookup functions
  1149  <a href="/pkg/os/user/#LookupGroup"><code>LookupGroup</code></a> and
  1150  <a href="/pkg/os/user/#LookupGroupId"><code>LookupGroupId</code></a>
  1151  and the new field <code>GroupIds</code> in the <code>User</code> struct,
  1152  provides access to system-specific user group information.
  1153  </p>
  1154  </dd>
  1155  </dl>
  1156  
  1157  <dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  1158  
  1159  <dd>
  1160  <p>
  1161  Although
  1162  <a href="/pkg/reflect/#Value"><code>Value</code></a>'s
  1163  <a href="/pkg/reflect/#Value.Field"><code>Field</code></a> method has always been documented to panic
  1164  if the given field number <code>i</code> is out of range, it has instead
  1165  silently returned a zero
  1166  <a href="/pkg/reflect/#Value"><code>Value</code></a>.
  1167  Go 1.7 changes the method to behave as documented.
  1168  </p>
  1169  
  1170  <p>
  1171  The new
  1172  <a href="/pkg/reflect/#StructOf"><code>StructOf</code></a>
  1173  function constructs a struct type at run time.
  1174  It completes the set of type constructors, joining
  1175  <a href="/pkg/reflect/#ArrayOf"><code>ArrayOf</code></a>,
  1176  <a href="/pkg/reflect/#ChanOf"><code>ChanOf</code></a>,
  1177  <a href="/pkg/reflect/#FuncOf"><code>FuncOf</code></a>,
  1178  <a href="/pkg/reflect/#MapOf"><code>MapOf</code></a>,
  1179  <a href="/pkg/reflect/#PtrTo"><code>PtrTo</code></a>,
  1180  and
  1181  <a href="/pkg/reflect/#SliceOf"><code>SliceOf</code></a>.
  1182  </p>
  1183  
  1184  <p>
  1185  <a href="/pkg/reflect/#StructTag"><code>StructTag</code></a>'s
  1186  new method
  1187  <a href="/pkg/reflect/#StructTag.Lookup"><code>Lookup</code></a>
  1188  is like
  1189  <a href="/pkg/reflect/#StructTag.Get"><code>Get</code></a>
  1190  but distinguishes the tag not containing the given key
  1191  from the tag associating an empty string with the given key.
  1192  </p>
  1193  
  1194  <p>
  1195  The
  1196  <a href="/pkg/reflect/#Type.Method"><code>Method</code></a> and
  1197  <a href="/pkg/reflect/#Type.NumMethod"><code>NumMethod</code></a>
  1198  methods of
  1199  <a href="/pkg/reflect/#Type"><code>Type</code></a> and
  1200  <a href="/pkg/reflect/#Value"><code>Value</code></a>
  1201  no longer return or count unexported methods.
  1202  </p>
  1203  </dd>
  1204  </dl>
  1205  
  1206  <dl id="strings"><dt><a href="/pkg/strings/">strings</a></dt>
  1207  
  1208  <dd>
  1209  <p>
  1210  In previous releases of Go, if
  1211  <a href="/pkg/strings/#Reader"><code>Reader</code></a>'s
  1212  <a href="/pkg/strings/#Reader.Read"><code>Read</code></a> method
  1213  were asked for zero bytes with no data remaining, it would
  1214  return a count of 0 and no error.
  1215  Now it returns a count of 0 and the error
  1216  <a href="/pkg/io/#EOF"><code>io.EOF</code></a>.
  1217  </p>
  1218  
  1219  <p>
  1220  The
  1221  <a href="/pkg/strings/#Reader"><code>Reader</code></a> type has a new method
  1222  <a href="/pkg/strings/#Reader.Reset"><code>Reset</code></a> to allow reuse of a <code>Reader</code>.
  1223  </p>
  1224  </dd>
  1225  </dl>
  1226  
  1227  <dl id="time"><dt><a href="/pkg/time/">time</a></dt>
  1228  
  1229  <dd>
  1230  <p>
  1231  <a href="/pkg/time/#Duration"><code>Duration</code></a>'s
  1232  time.Duration.String method now reports the zero duration as <code>"0s"</code>, not <code>"0"</code>.
  1233  <a href="/pkg/time/#ParseDuration"><code>ParseDuration</code></a> continues to accept both forms.
  1234  </p>
  1235  
  1236  <p>
  1237  The method call <code>time.Local.String()</code> now returns <code>"Local"</code> on all systems;
  1238  in earlier releases, it returned an empty string on Windows.
  1239  </p>
  1240  
  1241  <p>
  1242  The time zone database in
  1243  <code>$GOROOT/lib/time</code> has been updated
  1244  to IANA release 2016d.
  1245  This fallback database is only used when the system time zone database
  1246  cannot be found, for example on Windows.
  1247  The Windows time zone abbreviation list has also been updated.
  1248  </p>
  1249  </dd>
  1250  </dl>
  1251  
  1252  <dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
  1253  
  1254  <dd>
  1255  <p>
  1256  On Linux, the
  1257  <a href="/pkg/syscall/#SysProcAttr"><code>SysProcAttr</code></a> struct
  1258  (as used in
  1259  <a href="/pkg/os/exec/#Cmd"><code>os/exec.Cmd</code></a>'s <code>SysProcAttr</code> field)
  1260  has a new <code>Unshareflags</code> field.
  1261  If the field is nonzero, the child process created by
  1262  <a href="/pkg/syscall/#ForkExec"><code>ForkExec</code></a>
  1263  (as used in <code>exec.Cmd</code>'s <code>Run</code> method)
  1264  will call the
  1265  <a href="http://man7.org/linux/man-pages/man2/unshare.2.html"><i>unshare</i>(2)</a>
  1266  system call before executing the new program.
  1267  </p>
  1268  </dd>
  1269  </dl>
  1270  
  1271  
  1272  <dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
  1273  
  1274  <dd>
  1275  <p>
  1276  The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated
  1277  support throughout the system has been upgraded from version 8.0 to
  1278  <a href="http://www.unicode.org/versions/Unicode9.0.0/">Unicode 9.0</a>.
  1279  </p>
  1280  </dd>
  1281  </dl>