github.com/s1s1ty/go@v0.0.0-20180207192209-104445e3140f/doc/go1.10.html (about)

     1  <!--{
     2  	"Title": "Go 1.10 Release Notes",
     3  	"Path":  "/doc/go1.10",
     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">DRAFT RELEASE NOTES - Introduction to Go 1.10</h2>
    19  
    20  <p><strong>
    21    Go 1.10 is not yet released. These are work-in-progress
    22    release notes. Go 1.10 is expected to be released in February 2018.
    23  </strong></p>
    24  
    25  <p>
    26  The latest Go release, version 1.10, arrives six months after <a href="go1.9">Go 1.9</a>.
    27  Most of its changes are in the implementation of the toolchain, runtime, and libraries.
    28  As always, the release maintains the Go 1 <a href="/doc/go1compat.html">promise of compatibility</a>.
    29  We expect almost all Go programs to continue to compile and run as before.
    30  </p>
    31  
    32  <p>
    33  This release improves <a href="#build">caching of built packages</a>,
    34  adds <a href="#test">caching of successful test results</a>,
    35  runs <a href="#test-vet">vet automatically during tests</a>,
    36  and
    37  permits <a href="#cgo">passing string values directly between Go and C using cgo</a>.
    38  </p>
    39  
    40  <h2 id="language">Changes to the language</h2>
    41  
    42  <p>
    43  There are no significant changes to the language specification.
    44  </p>
    45  
    46  <p><!-- CL 60230 -->
    47  A corner case involving shifts by untyped constants has been clarified,
    48  and as a result the compilers have been updated to allow the index expression
    49  <code>x[1.0</code>&nbsp;<code>&lt;&lt;</code>&nbsp;<code>s]</code> where <code>s</code> is an untyped constant;
    50  the <a href="/pkg/go/types/">go/types</a> package already did.
    51  </p>
    52  
    53  <p><!-- CL 73233 -->
    54  The grammar for method expressions has been updated to relax the
    55  syntax to allow any type expression as a receiver;
    56  this matches what the compilers were already implementing.
    57  For example, <code>struct{io.Reader}.Read</code> is a valid, if unusual,
    58  method expression that the compilers already accepted and is
    59  now permitted by the language grammar.
    60  </p>
    61  
    62  <h2 id="ports">Ports</h2>
    63  
    64  <p>
    65  There are no new supported operating systems or processor architectures in this release.
    66  Most of the work has focused on strengthening the support for existing ports,
    67  in particular <a href="#asm">new instructions in the assembler</a>
    68  and improvements to the code generated by the compilers.
    69  </p>
    70  
    71  <p id="freebsd">
    72  As <a href="go1.9#freebsd">announced in the Go 1.9 release notes</a>,
    73  Go 1.10 now requires FreeBSD 10.3 or later;
    74  support for FreeBSD 9.3 has been removed.
    75  </p>
    76  
    77  <p id="netbsd">
    78  Go now runs on NetBSD again but requires the unreleased NetBSD 8.
    79  Only <code>GOARCH</code> <code>amd64</code> and <code>386</code> have
    80  been fixed. The <code>arm</code> port is still broken.
    81  </p>
    82  
    83  <p id="mips">
    84  On 32-bit MIPS systems, the new environment variable settings
    85  <code>GOMIPS=hardfloat</code> (the default) and
    86  <code>GOMIPS=softfloat</code> select whether to use
    87  hardware instructions or software emulation for floating-point computations.
    88  </p>
    89  
    90  <p id="openbsd">
    91  Go 1.10 is the last release that will run on OpenBSD 6.0.
    92  Go 1.11 will require OpenBSD 6.2.
    93  </p>
    94  
    95  <p id="darwin">
    96  Go 1.10 is the last release that will run on OS X 10.8 Mountain Lion or OS X 10.9 Mavericks.
    97  Go 1.11 will require OS X 10.10 Yosemite or later.
    98  </p>
    99  
   100  <p id="windows">
   101  Go 1.10 is the last release that will run on Windows XP or Windows Vista.
   102  Go 1.11 will require Windows 7 or later.
   103  </p>
   104  
   105  <h2 id="tools">Tools</h2>
   106  
   107  <h3 id="goroot">Default GOROOT &amp; GOTMPDIR</h3>
   108  
   109  <p>
   110  If the environment variable <code>$GOROOT</code> is unset,
   111  the go tool previously used the default <code>GOROOT</code>
   112  set during toolchain compilation.
   113  Now, before falling back to that default, the go tool attempts to
   114  deduce <code>GOROOT</code> from its own executable path.
   115  This allows binary distributions to be unpacked anywhere in the
   116  file system and then be used without setting <code>GOROOT</code>
   117  explicitly.
   118  </p>
   119  
   120  <p>
   121  By default, the go tool creates its temporary files and directories
   122  in the system temporary directory (for example, <code>$TMPDIR</code> on Unix).
   123  If the new environment variable <code>$GOTMPDIR</code> is set,
   124  the go tool will creates its temporary files and directories in that directory instead.
   125  </p>
   126  
   127  <h3 id="build">Build &amp; Install</h3>
   128  
   129  <p>
   130  The <code>go</code>&nbsp;<code>build</code> command now detects out-of-date packages
   131  purely based on the content of source files, specified build flags, and metadata stored in the compiled packages.
   132  Modification times are no longer consulted or relevant.
   133  The old advice to add <code>-a</code> to force a rebuild in cases where
   134  the modification times were misleading for one reason or another
   135  (for example, changes in build flags) is no longer necessary:
   136  builds now always detect when packages must be rebuilt.
   137  (If you observe otherwise, please file a bug.)
   138  </p>
   139  
   140  <p>
   141  The <code>go</code>&nbsp;<code>build</code> <code>-asmflags</code>, <code>-gcflags</code>, <code>-gccgoflags</code>, and <code>-ldflags</code> options
   142  now apply by default only to the packages listed directly on the command line.
   143  For example, <code>go</code> <code>build</code> <code>-gcflags=-m</code> <code>mypkg</code>
   144  passes the compiler the <code>-m</code> flag when building <code>mypkg</code>
   145  but not its dependencies.
   146  The new, more general form <code>-asmflags=pattern=flags</code> (and similarly for the others)
   147  applies the <code>flags</code> only to the packages matching the pattern.
   148  For example: <code>go</code> <code>install</code> <code>-ldflags=cmd/gofmt=-X=main.version=1.2.3</code> <code>cmd/...</code>
   149  installs all the commands matching <code>cmd/...</code> but only applies the <code>-X</code> option
   150  to the linker flags for <code>cmd/gofmt</code>.
   151  For more details, see <a href="/cmd/go/#hdr-Compile_packages_and_dependencies"><code>go</code> <code>help</code> <code>build</code></a>.
   152  </p>
   153  
   154  <p>
   155  The <code>go</code>&nbsp;<code>build</code> command now maintains a cache of
   156  recently built packages, separate from the installed packages in <code>$GOROOT/pkg</code> or <code>$GOPATH/pkg</code>.
   157  The effect of the cache should be to speed builds that do not explicitly install packages
   158  or when switching between different copies of source code (for example, when changing
   159  back and forth between different branches in a version control system).
   160  The old advice to add the <code>-i</code> flag for speed, as in <code>go</code> <code>build</code> <code>-i</code>
   161  or <code>go</code> <code>test</code> <code>-i</code>,
   162  is no longer necessary: builds run just as fast without <code>-i</code>.
   163  For more details, see <a href="/cmd/go/#hdr-Build_and_test_caching"><code>go</code> <code>help</code> <code>cache</code></a>.
   164  </p>
   165  
   166  <p>
   167  The <code>go</code>&nbsp;<code>install</code> command now installs only the
   168  packages and commands listed directly on the command line.
   169  For example, <code>go</code> <code>install</code> <code>cmd/gofmt</code>
   170  installs the gofmt program but not any of the packages on which it depends.
   171  The new build cache makes future commands still run as quickly as if the
   172  dependencies had been installed.
   173  To force the installation of dependencies, use the new
   174  <code>go</code> <code>install</code> <code>-i</code> flag.
   175  Installing dependency packages should not be necessary in general,
   176  and the very concept of installed packages may disappear in a future release.
   177  </p>
   178  
   179  <p>
   180  Many details of the <code>go</code>&nbsp;<code>build</code> implementation have changed to support these improvements.
   181  One new requirement implied by these changes is that
   182  binary-only packages must now declare accurate import blocks in their
   183  stub source code, so that those imports can be made available when
   184  linking a program using the binary-only package.
   185  For more details, see <a href="/cmd/go/#hdr-File_types"><code>go</code> <code>help</code> <code>filetype</code></a>.
   186  </p>
   187  
   188  <h3 id="test">Test</h3>
   189  
   190  <p>
   191  The <code>go</code>&nbsp;<code>test</code> command now caches test results:
   192  if the test executable and command line match a previous run
   193  and the files and environment variables consulted by that run
   194  have not changed either, <code>go</code> <code>test</code> will print
   195  the previous test output, replacing the elapsed time with the string “(cached).”
   196  Test caching applies only to successful test results;
   197  only to <code>go</code> <code>test</code>
   198  commands with an explicit list of packages; and
   199  only to command lines using a subset of the
   200  <code>-cpu</code>, <code>-list</code>, <code>-parallel</code>,
   201  <code>-run</code>, <code>-short</code>, and <code>-v</code> test flags.
   202  The idiomatic way to bypass test caching is to use <code>-count=1</code>.
   203  </p>
   204  
   205  <p id="test-vet">
   206  The <code>go</code>&nbsp;<code>test</code> command now automatically runs
   207  <code>go</code> <code>vet</code> on the package being tested,
   208  to identify significant problems before running the test.
   209  Any such problems are treated like build errors and prevent execution of the test.
   210  Only a high-confidence subset of the available <code>go</code> <code>vet</code>
   211  checks are enabled for this automatic check.
   212  To disable the running of <code>go</code> <code>vet</code>, use
   213  <code>go</code> <code>test</code> <code>-vet=off</code>.
   214  </p>
   215  
   216  <p>
   217  The <code>go</code> <code>test</code> <code>-coverpkg</code> flag now
   218  interprets its argument as a comma-separated list of patterns to match against
   219  the dependencies of each test, not as a list of packages to load anew.
   220  For example, <code>go</code> <code>test</code> <code>-coverpkg=all</code>
   221  is now a meaningful way to run a test with coverage enabled for the test package
   222  and all its dependencies.
   223  Also, the <code>go</code> <code>test</code> <code>-coverprofile</code> option is now
   224  supported when running multiple tests.
   225  </p>
   226  
   227  <p>
   228  In case of failure due to timeout, tests are now more likely to write their profiles before exiting.
   229  </p>
   230  
   231  <p>
   232  The <code>go</code>&nbsp;<code>test</code> command now always
   233  merges the standard output and standard error from a given test binary execution
   234  and writes both to <code>go</code> <code>test</code>'s standard output.
   235  In past releases, <code>go</code> <code>test</code> only applied this
   236  merging most of the time.
   237  </p>
   238  
   239  <p>
   240  The <code>go</code>&nbsp;<code>test</code> <code>-v</code> output
   241  now includes <code>PAUSE</code> and <code>CONT</code> status update
   242  lines to mark when <a href="/pkg/testing/#T.Parallel">parallel tests</a> pause and continue.
   243  </p>
   244  
   245  <p>
   246  The new <code>go</code> <code>test</code> <code>-failfast</code> flag
   247  disables running additional tests after any test fails.
   248  Note that tests running in parallel with the failing test are allowed to complete.
   249  </p>
   250  
   251  <p>
   252  Finally, the new <code>go</code> <code>test</code> <code>-json</code> flag
   253  filters test output through the new command
   254  <code>go</code> <code>tool</code> <code>test2json</code>
   255  to produce a machine-readable JSON-formatted description of test execution.
   256  This allows the creation of rich presentations of test execution
   257  in IDEs and other tools.
   258  </p>
   259  
   260  
   261  <p>
   262  For more details about all these changes,
   263  see <a href="/cmd/go/#hdr-Test_packages"><code>go</code> <code>help</code> <code>test</code></a>
   264  and the <a href="/cmd/test2json/">test2json documentation</a>.
   265  </p>
   266  
   267  <h3 id="cgo">Cgo</h3>
   268  
   269  <p>
   270  Cgo now implements a C typedef like “<code>typedef</code> <code>X</code> <code>Y</code>” using a Go type alias,
   271  so that Go code may use the types <code>C.X</code> and <code>C.Y</code> interchangeably.
   272  It also now supports the use of niladic function-like macros.
   273  Also, the documentation has been updated to clarify that
   274  Go structs and Go arrays are not supported in the type signatures of cgo-exported functions.
   275  </p>
   276  
   277  <p>
   278  Cgo now supports direct access to Go string values from C.
   279  Functions in the C preamble may use the type <code>_GoString_</code>
   280  to accept a Go string as an argument.
   281  C code may call <code>_GoStringLen</code> and <code>_GoStringPtr</code>
   282  for direct access to the contents of the string.
   283  A value of type <code>_GoString_</code>
   284  may be passed in a call to an exported Go function that takes an argument of Go type <code>string</code>.
   285  </p>
   286  
   287  <p>
   288  During toolchain bootstrap, the environment variables <code>CC</code> and <code>CC_FOR_TARGET</code> specify
   289  the default C compiler that the resulting toolchain will use for host and target builds, respectively.
   290  However, if the toolchain will be used with multiple targets, it may be necessary to specify a different C compiler for each
   291  (for example, a different compiler for <code>darwin/arm64</code> versus <code>linux/ppc64le</code>).
   292  The new set of environment variables <code>CC_FOR_<i>goos</i>_<i>goarch</i></code>
   293  allows specifying a different default C compiler for each target.
   294  Note that these variables only apply during toolchain bootstrap,
   295  to set the defaults used by the resulting toolchain.
   296  Later <code>go</code> <code>build</code> commands use the <code>CC</code> environment
   297  variable or else the built-in default.
   298  </p>
   299  
   300  <p>
   301  Cgo now translates some C types that would normally map to a pointer
   302  type in Go, to a <code>uintptr</code> instead. These types include
   303  the <code>CFTypeRef</code> hierarchy in Darwin's CoreFoundation
   304  framework and the <code>jobject</code> hierarchy in Java's JNI
   305  interface.
   306  </p>
   307  
   308  <p>
   309  These types must be <code>uintptr</code> on the Go side because they
   310  would otherwise confuse the Go garbage collector; they are sometimes
   311  not really pointers but data structures encoded in a pointer-sized integer.
   312  Pointers to Go memory must not be stored in these <code>uintptr</code> values.
   313  </p>
   314  
   315  <p>
   316  Because of this change, values of the affected types need to be
   317  zero-initialized with the constant <code>0</code> instead of the
   318  constant <code>nil</code>. Go 1.10 provides <code>gofix</code>
   319  modules to help with that rewrite:
   320  </p>
   321  
   322  <pre>
   323  go tool fix -r cftype &lt;pkg&gt;
   324  go tool fix -r jni &lt;pkg&gt;
   325  </pre>
   326  
   327  <p>
   328  For more details, see the <a href="/cmd/cgo/">cgo documentation</a>.
   329  </p>
   330  
   331  <h3 id="doc">Doc</h3>
   332  
   333  <p>
   334  The <code>go</code>&nbsp;<code>doc</code> tool now adds functions returning slices of <code>T</code> or <code>*T</code>
   335  to the display of type <code>T</code>, similar to the existing behavior for functions returning single <code>T</code> or <code>*T</code> results.
   336  For example:
   337  </p>
   338  
   339  <pre>
   340  $ go doc mail.Address
   341  package mail // import "net/mail"
   342  
   343  type Address struct {
   344  	Name    string
   345  	Address string
   346  }
   347      Address represents a single mail address.
   348  
   349  func ParseAddress(address string) (*Address, error)
   350  func ParseAddressList(list string) ([]*Address, error)
   351  func (a *Address) String() string
   352  $
   353  </pre>
   354  
   355  <p>
   356  Previously, <code>ParseAddressList</code> was only shown in the package overview (<code>go</code> <code>doc</code> <code>mail</code>).
   357  </p>
   358  
   359  <h3 id="fix">Fix</h3>
   360  
   361  <p>
   362  The <code>go</code>&nbsp;<code>fix</code> tool now replaces imports of <code>"golang.org/x/net/context"</code>
   363  with <code>"context"</code>.
   364  (Forwarding aliases in the former make it completely equivalent to the latter when using Go 1.9 or later.)
   365  </p>
   366  
   367  <h3 id="get">Get</h3>
   368  
   369  <p>
   370  The <code>go</code>&nbsp;<code>get</code> command now supports Fossil source code repositories.
   371  </p>
   372  
   373  <h3 id="pprof">Pprof</h3>
   374  
   375  <p>
   376  The blocking and mutex profiles produced by the <code>runtime/pprof</code> package
   377  now include symbol information, so they can be viewed
   378  in <code>go</code> <code>tool</code> <code>pprof</code>
   379  without the binary that produced the profile.
   380  (All other profile types were changed to include symbol information in Go 1.9.)
   381  </p>
   382  
   383  <p>
   384  The <a href="/cmd/pprof/"><code>go</code>&nbsp;<code>tool</code>&nbsp;<code>pprof</code></a>
   385  profile visualizer has been updated to git version 9e20b5b (2017-11-08)
   386  from <a href="https://github.com/google/pprof">github.com/google/pprof</a>,
   387  which includes an updated web interface.
   388  </p>
   389  
   390  <h3 id="vet">Vet</h3>
   391  
   392  <p>
   393  The <a href="/cmd/vet/"><code>go</code>&nbsp;<code>vet</code></a> command now always has access to
   394  complete, up-to-date type information when checking packages, even for packages using cgo or vendored imports.
   395  The reports should be more accurate as a result.
   396  Note that only <code>go</code>&nbsp;<code>vet</code> has access to this information;
   397  the more low-level <code>go</code>&nbsp;<code>tool</code>&nbsp;<code>vet</code> does not
   398  and should be avoided except when working on <code>vet</code> itself.
   399  (As of Go 1.9, <code>go</code>&nbsp;<code>vet</code> provides access to all the same flags as
   400  <code>go</code>&nbsp;<code>tool</code>&nbsp;<code>vet</code>.)
   401  </p>
   402  
   403  <h3 id="diag">Diagnostics</h3>
   404  
   405  <p>
   406  This release includes a new <a href="/doc/diagnostics.html">overview of available Go program diagnostic tools</a>.
   407  </p>
   408  
   409  <h3 id="gofmt">Gofmt</h3>
   410  
   411  <p>
   412  Two minor details of the default formatting of Go source code have changed.
   413  First, certain complex three-index slice expressions previously formatted like
   414  <code>x[i+1</code>&nbsp;<code>:</code>&nbsp;<code>j:k]</code> and now
   415  format with more consistent spacing: <code>x[i+1</code>&nbsp;<code>:</code>&nbsp;<code>j</code>&nbsp;<code>:</code>&nbsp;<code>k]</code>.
   416  Second, single-method interface literals written on a single line,
   417  which are sometimes used in type assertions,
   418  are no longer split onto multiple lines.
   419  </p>
   420  
   421  <p>
   422  Note that these kinds of minor updates to gofmt are expected from time to time.
   423  In general, we recommend against building systems that check that source code
   424  matches the output of a specific version of gofmt.
   425  For example, a continuous integration test that fails if any code already checked into
   426  a repository is not “properly formatted” is inherently fragile and not recommended.
   427  </p>
   428  
   429  <p>
   430  If multiple programs must agree about which version of gofmt is used to format a source file,
   431  we recommend that they do this by arranging to invoke the same gofmt binary.
   432  For example, in the Go open source repository, our Git pre-commit hook is written in Go
   433  and could import <code>go/format</code> directly, but instead it invokes the <code>gofmt</code>
   434  binary found in the current path, so that the pre-commit hook need not be recompiled
   435  each time <code>gofmt</code> changes.
   436  </p>
   437  
   438  <h3 id="compiler">Compiler Toolchain</h3>
   439  
   440  <p>
   441  The compiler includes many improvements to the performance of generated code,
   442  spread fairly evenly across the supported architectures.
   443  </p>
   444  
   445  <p>
   446  The DWARF debug information recorded in binaries has been improved in a few ways:
   447  constant values are now recorded;
   448  line number information is more accurate, making source-level stepping through a program work better;
   449  and each package is now presented as its own DWARF compilation unit.
   450  </p>
   451  
   452  <p>
   453  The various <a href="https://docs.google.com/document/d/1nr-TQHw_er6GOQRsF6T43GGhFDelrAP0NqSS_00RgZQ/edit">build modes</a>
   454  have been ported to more systems.
   455  Specifically, <code>c-shared</code> now works on <code>linux/ppc64le</code>, <code>windows/386</code>, and <code>windows/amd64</code>;
   456  <code>pie</code> now works on <code>darwin/amd64</code> and also forces the use of external linking on all systems;
   457  and <code>plugin</code> now works on <code>linux/ppc64le</code> and <code>darwin/amd64</code>.
   458  </p>
   459  
   460  <p>
   461  The <code>linux/ppc64le</code> port now requires the use of external linking
   462  with any programs that use cgo, even uses by the standard library.
   463  </p>
   464  
   465  <h3 id="asm">Assembler</h3>
   466  
   467  <p>
   468  For the ARM 32-bit port, the assembler now supports the instructions
   469  <code><small>BFC</small></code>,
   470  <code><small>BFI</small></code>,
   471  <code><small>BFX</small></code>,
   472  <code><small>BFXU</small></code>,
   473  <code><small>FMULAD</small></code>,
   474  <code><small>FMULAF</small></code>,
   475  <code><small>FMULSD</small></code>,
   476  <code><small>FMULSF</small></code>,
   477  <code><small>FNMULAD</small></code>,
   478  <code><small>FNMULAF</small></code>,
   479  <code><small>FNMULSD</small></code>,
   480  <code><small>FNMULSF</small></code>,
   481  <code><small>MULAD</small></code>,
   482  <code><small>MULAF</small></code>,
   483  <code><small>MULSD</small></code>,
   484  <code><small>MULSF</small></code>,
   485  <code><small>NMULAD</small></code>,
   486  <code><small>NMULAF</small></code>,
   487  <code><small>NMULD</small></code>,
   488  <code><small>NMULF</small></code>,
   489  <code><small>NMULSD</small></code>,
   490  <code><small>NMULSF</small></code>,
   491  <code><small>XTAB</small></code>,
   492  <code><small>XTABU</small></code>,
   493  <code><small>XTAH</small></code>,
   494  and
   495  <code><small>XTAHU</small></code>.
   496  </p>
   497  
   498  <p>
   499  For the ARM 64-bit port, the assembler now supports the
   500  <code><small>VADD</small></code>,
   501  <code><small>VADDP</small></code>,
   502  <code><small>VADDV</small></code>,
   503  <code><small>VAND</small></code>,
   504  <code><small>VCMEQ</small></code>,
   505  <code><small>VDUP</small></code>,
   506  <code><small>VEOR</small></code>,
   507  <code><small>VLD1</small></code>,
   508  <code><small>VMOV</small></code>,
   509  <code><small>VMOVI</small></code>,
   510  <code><small>VMOVS</small></code>,
   511  <code><small>VORR</small></code>,
   512  <code><small>VREV32</small></code>,
   513  and
   514  <code><small>VST1</small></code>
   515  instructions.
   516  </p>
   517  
   518  <p>
   519  For the PowerPC 64-bit port, the assembler now supports the POWER9 instructions
   520  <code><small>ADDEX</small></code>,
   521  <code><small>CMPEQB</small></code>,
   522  <code><small>COPY</small></code>,
   523  <code><small>DARN</small></code>,
   524  <code><small>LDMX</small></code>,
   525  <code><small>MADDHD</small></code>,
   526  <code><small>MADDHDU</small></code>,
   527  <code><small>MADDLD</small></code>,
   528  <code><small>MFVSRLD</small></code>,
   529  <code><small>MTVSRDD</small></code>,
   530  <code><small>MTVSRWS</small></code>,
   531  <code><small>PASTECC</small></code>,
   532  <code><small>VCMPNEZB</small></code>,
   533  <code><small>VCMPNEZBCC</small></code>,
   534  and
   535  <code><small>VMSUMUDM</small></code>.
   536  </p>
   537  
   538  <p>
   539  For the S390X port, the assembler now supports the
   540  <code><small>TMHH</small></code>,
   541  <code><small>TMHL</small></code>,
   542  <code><small>TMLH</small></code>,
   543  and
   544  <code><small>TMLL</small></code>
   545  instructions.
   546  </p>
   547  
   548  <p>
   549  For the X86 64-bit port, the assembler now supports 359 new instructions,
   550  including the full AVX, AVX2, BMI, BMI2, F16C, FMA3, SSE2, SSE3, SSSE3, SSE4.1, and SSE4.2 extension sets.
   551  The assembler also no longer implements <code><small>MOVL</small></code>&nbsp;<code><small>$0,</small></code>&nbsp;<code><small>AX</small></code>
   552  as an <code><small>XORL</small></code> instruction,
   553  to avoid clearing the condition flags unexpectedly.
   554  </p>
   555  
   556  <h3 id="gccgo">Gccgo</h3>
   557  
   558  <p>
   559  Due to the alignment of Go's semiannual release schedule with GCC's
   560  annual release schedule,
   561  GCC release 7 contains the Go 1.8.3 version of gccgo.
   562  We expect that the next release, GCC 8, will contain the Go 1.10
   563  version of gccgo.
   564  </p>
   565  
   566  <h2 id="runtime">Runtime</h2>
   567  
   568  <p>
   569  The behavior of nested calls to
   570  <a href="/pkg/runtime/#LockOSThread"><code>LockOSThread</code></a> and
   571  <a href="/pkg/runtime/#UnlockOSThread"><code>UnlockOSThread</code></a>
   572  has changed.
   573  These functions control whether a goroutine is locked to a specific operating system thread,
   574  so that the goroutine only runs on that thread, and the thread only runs that goroutine.
   575  Previously, calling <code>LockOSThread</code> more than once in a row
   576  was equivalent to calling it once, and a single <code>UnlockOSThread</code>
   577  always unlocked the thread.
   578  Now, the calls nest: if <code>LockOSThread</code> is called multiple times,
   579  <code>UnlockOSThread</code> must be called the same number of times
   580  in order to unlock the thread.
   581  Existing code that was careful not to nest these calls will remain correct.
   582  Existing code that incorrectly assumed the calls nested will become correct.
   583  Most uses of these functions in public Go source code falls into the second category.
   584  </p>
   585  
   586  <p>
   587  Because one common use of <code>LockOSThread</code> and <code>UnlockOSThread</code>
   588  is to allow Go code to reliably modify thread-local state (for example, Linux or Plan 9 name spaces),
   589  the runtime now treats locked threads as unsuitable for reuse or for creating new threads.
   590  </p>
   591  
   592  <p>
   593  Stack traces no longer include implicit wrapper functions (previously marked <code>&lt;autogenerated&gt;</code>),
   594  unless a fault or panic happens in the wrapper itself.
   595  As a result, skip counts passed to functions like <a href="/pkg/runtime/#Caller"><code>Caller</code></a>
   596  should now always match the structure of the code as written, rather than depending on
   597  optimization decisions and implementation details.
   598  </p>
   599  
   600  <p>
   601  The garbage collector has been modified to reduce its impact on allocation latency.
   602  It now uses a smaller fraction of the overall CPU when running, but it may run more of the time.
   603  The total CPU consumed by the garbage collector has not changed significantly.
   604  </p>
   605  
   606  <p>
   607  The <a href="/pkg/runtime/#GOROOT"><code>GOROOT</code></a> function
   608  now defaults (when the <code>$GOROOT</code> environment variable is not set)
   609  to the <code>GOROOT</code> or <code>GOROOT_FINAL</code> in effect
   610  at the time the calling program was compiled.
   611  Previously it used the <code>GOROOT</code> or <code>GOROOT_FINAL</code> in effect
   612  at the time the toolchain that compiled the calling program was compiled.
   613  </p>
   614  
   615  <p>
   616  There is no longer a limit on the <a href="/pkg/runtime/#GOMAXPROCS"><code>GOMAXPROCS</code></a> setting.
   617  (In Go 1.9 the limit was 1024.)
   618  </p>
   619  
   620  <h2 id="performance">Performance</h2>
   621  
   622  <p>
   623  As always, the changes are so general and varied that precise
   624  statements about performance are difficult to make.  Most programs
   625  should run a bit faster, due to speedups in the garbage collector,
   626  better generated code, and optimizations in the core library.
   627  </p>
   628  
   629  <h2 id="gc">Garbage Collector</h2>
   630  
   631  <p>
   632  Many applications should experience significantly lower allocation latency and overall performance overhead when the garbage collector is active.
   633  </p>
   634  
   635  <h2 id="library">Core library</h2>
   636  
   637  <p>
   638  All of the changes to the standard library are minor.
   639  The changes in <a href="#bytes">bytes</a>
   640  and <a href="#net/url">net/url</a> are the most likely to require updating of existing programs.
   641  </p>
   642  
   643  <h3 id="minor_library_changes">Minor changes to the library</h3>
   644  
   645  <p>
   646  As always, there are various minor changes and updates to the library,
   647  made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a>
   648  in mind.
   649  </p>
   650  
   651  <dl id="archive/tar"><dt><a href="/pkg/archive/tar/">archive/tar</a></dt>
   652  <dd>
   653  <p>
   654  In general, the handling of special header formats is significantly improved and expanded.
   655  </p>
   656  <p>
   657  <a href="/pkg/archive/tar/#FileInfoHeader"><code>FileInfoHeader</code></a> has always
   658  recorded the Unix UID and GID numbers from its <a href="/pkg/os/#FileInfo"><code>os.FileInfo</code></a> argument
   659  (specifically, from the system-dependent information returned by the <code>FileInfo</code>'s <code>Sys</code> method)
   660  in the returned <a href="/pkg/archive/tar/#Header"><code>Header</code></a>.
   661  Now it also records the user and group names corresponding to those IDs,
   662  as well as the major and minor device numbers for device files.
   663  </p>
   664  <p>
   665  The new <a href="/pkg/archive/tar/#Header"><code>Header.Format</code></a> field
   666  of type <a href="/pkg/archive/tar/#Format"><code>Format</code></a>
   667  controls which tar header format the <a href="/pkg/archive/tar/#Writer"><code>Writer</code></a> uses.
   668  The default, as before, is to select the most widely-supported header type
   669  that can encode the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU).
   670  The <a href="/pkg/archive/tar/#Reader"><code>Reader</code></a> sets <code>Header.Format</code> for each header it reads.
   671  </p>
   672  <p>
   673  <code>Reader</code> and the <code>Writer</code> now support arbitrary PAX records,
   674  using the new <a href="/pkg/archive/tar/#Header"><code>Header.PAXRecords</code></a> field,
   675  a generalization of the existing <code>Xattrs</code> field.
   676  </p>
   677  <p>
   678  The <code>Reader</code> no longer insists that the file name or link name in GNU headers
   679  be valid UTF-8.
   680  </p>
   681  <p>
   682  When writing PAX- or GNU-format headers, the <code>Writer</code> now includes
   683  the <code>Header.AccessTime</code> and <code>Header.ChangeTime</code> fields (if set).
   684  When writing PAX-format headers, the times include sub-second precision.
   685  </p>
   686  </dl>
   687  
   688  <dl id="archive/zip"><dt><a href="/pkg/archive/zip/">archive/zip</a></dt>
   689  <dd>
   690  <p>
   691  Go 1.10 adds more complete support for times and character set encodings in ZIP archives.
   692  </p>
   693  <p>
   694  The original ZIP format used the standard MS-DOS encoding of year, month, day, hour, minute, and second into fields in two 16-bit values.
   695  That encoding cannot represent time zones or odd seconds, so multiple extensions have been
   696  introduced to allow richer encodings.
   697  In Go 1.10, the <a href="/pkg/archive/zip/#Reader"><code>Reader</code></a> and <a href="/pkg/archive/zip/#Writer"><code>Writer</code></a>
   698  now support the widely-understood Info-Zip extension that encodes the time separately in the 32-bit Unix “seconds since epoch” form.
   699  The <a href="/pkg/archive/zip/#FileHeader"><code>FileHeader</code></a>'s new <code>Modified</code> field of type <a href="/pkg/time/#Time"><code>time.Time</code></a>
   700  obsoletes the <code>ModifiedTime</code> and <code>ModifiedDate</code> fields, which continue to hold the MS-DOS encoding.
   701  The <code>Reader</code> and <code>Writer</code> now adopt the common
   702  convention that a ZIP archive storing a time zone-independent Unix time
   703  also stores the local time in the MS-DOS field,
   704  so that the time zone offset can be inferred.
   705  For compatibility, the <a href="/pkg/archive/zip/#FileHeader.ModTime"><code>ModTime</code></a> and
   706  <a href="/pkg/archive/zip/#FileHeader.SetModTime"><code>SetModTime</code></a> methods
   707  behave the same as in earlier releases; new code should use <code>Modified</code> directly.
   708  </p>
   709  <p>
   710  The header for each file in a ZIP archive has a flag bit indicating whether
   711  the name and comment fields are encoded as UTF-8, as opposed to a system-specific default encoding.
   712  In Go 1.8 and earlier, the <code>Writer</code> never set the UTF-8 bit.
   713  In Go 1.9, the <code>Writer</code> changed to set the UTF-8 bit almost always.
   714  This broke the creation of ZIP archives containing Shift-JIS file names.
   715  In Go 1.10, the <code>Writer</code> now sets the UTF-8 bit only when
   716  both the name and the comment field are valid UTF-8 and at least one is non-ASCII.
   717  Because non-ASCII encodings very rarely look like valid UTF-8, the new
   718  heuristic should be correct nearly all the time.
   719  Setting a <code>FileHeader</code>'s new <code>NonUTF8</code> field to true
   720  disables the heuristic entirely for that file.
   721  </p>
   722  <p>
   723  The <code>Writer</code> also now supports setting the end-of-central-directory record's comment field,
   724  by calling the <code>Writer</code>'s new <a href="/pkg/archive/zip/#Writer.SetComment"><code>SetComment</code></a> method.
   725  </p>
   726  </dl>
   727  
   728  <dl id="bufio"><dt><a href="/pkg/bufio/">bufio</a></dt>
   729  <dd>
   730  <p>
   731  The new <a href="/pkg/bufio/#Reader.Size"><code>Reader.Size</code></a>
   732  and <a href="/pkg/bufio/#Writer.Size"><code>Writer.Size</code></a>
   733  methods report the <code>Reader</code> or <code>Writer</code>'s underlying buffer size.
   734  </p>
   735  </dl>
   736  
   737  <dl id="bytes"><dt><a href="/pkg/bytes/">bytes</a></dt>
   738  <dd>
   739  <p>
   740  The
   741  <a href="/pkg/bytes/#Fields"><code>Fields</code></a>,
   742  <a href="/pkg/bytes/#FieldsFunc"><code>FieldsFunc</code></a>,
   743  <a href="/pkg/bytes/#Split"><code>Split</code></a>,
   744  and
   745  <a href="/pkg/bytes/#SplitAfter"><code>SplitAfter</code></a>
   746  functions have always returned subslices of their inputs.
   747  Go 1.10 changes each returned subslice to have capacity equal to its length,
   748  so that appending to one cannot overwrite adjacent data in the original input.
   749  </p>
   750  </dl>
   751  
   752  <dl id="crypto/cipher"><dt><a href="/pkg/crypto/cipher/">crypto/cipher</a></dt>
   753  <dd>
   754  <p>
   755  <a href="/pkg/crypto/cipher/#NewOFB"><code>NewOFB</code></a> now panics if given
   756  an initialization vector of incorrect length, like the other constructors in the
   757  package always have.
   758  (Previously it returned a nil <code>Stream</code> implementation.)
   759  </p>
   760  </dl>
   761  
   762  <dl id="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
   763  <dd>
   764  <p>
   765  The TLS server now advertises support for SHA-512 signatures when using TLS 1.2.
   766  The server already supported the signatures, but some clients would not select
   767  them unless explicitly advertised.
   768  </p>
   769  </dl>
   770  
   771  <dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
   772  <dd>
   773  <p>
   774  <a href="/pkg/crypto/x509/#Certificate.Verify"><code>Certificate.Verify</code></a>
   775  now enforces the name constraints for all
   776  names contained in the certificate, not just the one name that a client has asked about.
   777  Extended key usage restrictions are similarly now checked all at once.
   778  As a result, after a certificate has been validated, now it can be trusted in its entirety.
   779  It is no longer necessary to revalidate the certificate for each additional name
   780  or key usage.
   781  </p>
   782  
   783  <p>
   784  Parsed certificates also now report URI names and IP, email, and URI constraints, using the new
   785  <a href="/pkg/crypto/x509/#Certificate"><code>Certificate</code></a> fields
   786  <code>URIs</code>, <code>PermittedIPRanges</code>, <code>ExcludedIPRanges</code>,
   787  <code>PermittedEmailAddresses</code>, <code>ExcludedEmailAddresses</code>,
   788  <code>PermittedURIDomains</code>, and <code>ExcludedURIDomains</code>.
   789  </p>
   790  
   791  <p>
   792  The new <a href="/pkg/crypto/x509/#MarshalPKCS1PublicKey"><code>MarshalPKCS1PublicKey</code></a>
   793  and <a href="/pkg/crypto/x509/#ParsePKCS1PublicKey"><code>ParsePKCS1PublicKey</code></a>
   794  functions convert an RSA public key to and from PKCS#1-encoded form.
   795  </p>
   796  
   797  <p>
   798  The new <a href="/pkg/crypto/x509/#MarshalPKCS8PrivateKey"><code>MarshalPKCS8PrivateKey</code></a>
   799  function converts a private key to PKCS#8-encoded form.
   800  (<a href="/pkg/crypto/x509/#ParsePKCS8PrivateKey"><code>ParsePKCS8PrivateKey</code></a>
   801  has existed since Go 1.)
   802  </p>
   803  </dl>
   804  
   805  <dl id="crypto/x509/pkix"><dt><a href="/pkg/crypto/x509/pkix/">crypto/x509/pkix</a></dt>
   806  <dd>
   807  <p>
   808  <a href="/pkg/crypto/x509/pkix/#Name"><code>Name</code></a> now implements a
   809  <a href="/pkg/crypto/x509/pkix/#Name.String"><code>String</code></a> method that
   810  formats the X.509 distinguished name in the standard RFC 2253 format.
   811  </p>
   812  </dl>
   813  
   814  <dl id="database/sql/driver"><dt><a href="/pkg/database/sql/driver/">database/sql/driver</a></dt>
   815  <dd>
   816  <p>
   817  Drivers that currently hold on to the destination buffer provided by
   818  <a href="/pkg/database/sql/driver/#Rows.Next"><code>driver.Rows.Next</code></a> should ensure they no longer
   819  write to a buffer assigned to the destination array outside of that call.
   820  Drivers must be careful that underlying buffers are not modified when closing
   821  <a href="/pkg/database/sql/driver/#Rows"><code>driver.Rows</code></a>.
   822  </p>
   823  <p>
   824  Drivers that want to construct a <a href="/pkg/database/sql/#DB"><code>sql.DB</code></a> for
   825  their clients can now implement the <a href="/pkg/database/sql/driver/#Connector"><code>Connector</code></a> interface
   826  and call the new <a href="/pkg/database/sql/#OpenDB"><code>sql.OpenDB</code></a> function,
   827  instead of needing to encode all configuration into a string
   828  passed to  <a href="/pkg/database/sql/#Open"><code>sql.Open</code></a>.
   829  </p>
   830  <p>
   831  Drivers that want to parse the configuration string only once per <code>sql.DB</code>
   832  instead of once per <a href="/pkg/database/sql/#Conn"><code>sql.Conn</code></a>,
   833  or that want access to each <code>sql.Conn</code>'s underlying context,
   834  can make their <a href="/pkg/database/sql/driver/#Driver"><code>Driver</code></a>
   835  implementations also implement <a href="/pkg/database/sql/driver/#DriverContext"><code>DriverContext</code></a>'s
   836  new <code>OpenConnector</code> method.
   837  </p>
   838  <p>
   839  Drivers that implement <a href="/pkg/database/sql/driver/#ExecerContext"><code>ExecerContext</code></a>
   840  no longer need to implement <a href="/pkg/database/sql/driver/#Execer"><code>Execer</code></a>;
   841  similarly, drivers that implement <a href="/pkg/database/sql/driver/#QueryerContext"><code>QueryerContext</code></a>
   842  no longer need to implement <a href="/pkg/database/sql/driver/#Queryer"><code>Queryer</code></a>.
   843  Previously, even if the context-based interfaces were implemented they were ignored
   844  unless the non-context-based interfaces were also implemented.
   845  </p>
   846  <p>
   847  To allow drivers to better isolate different clients using a cached driver connection in succession,
   848  if a <a href="/pkg/database/sql/driver/#Conn"><code>Conn</code></a> implements the new
   849  <a href="/pkg/database/sql/driver/#SessionResetter"><code>SessionResetter</code></a> interface,
   850  <code>database/sql</code> will now call <code>ResetSession</code> before
   851  reusing the <code>Conn</code> for a new client.
   852  </p>
   853  </dl>
   854  
   855  <dl id="debug/elf"><dt><a href="/pkg/debug/elf/">debug/elf</a></dt>
   856  <dd>
   857  <p>
   858  This release adds 348 new relocation constants divided between the relocation types
   859  <a href="/pkg/debug/elf/#R_386"><code>R_386</code></a>,
   860  <a href="/pkg/debug/elf/#R_AARCH64"><code>R_AARCH64</code></a>,
   861  <a href="/pkg/debug/elf/#R_ARM"><code>R_ARM</code></a>,
   862  <a href="/pkg/debug/elf/#R_PPC64"><code>R_PPC64</code></a>,
   863  and
   864  <a href="/pkg/debug/elf/#R_X86_64"><code>R_X86_64</code></a>.
   865  </p>
   866  </dl>
   867  
   868  <dl id="debug/macho"><dt><a href="/pkg/debug/macho/">debug/macho</a></dt>
   869  <dd>
   870  <p>
   871  Go 1.10 adds support for reading relocations from Mach-O sections,
   872  using the <a href="/pkg/debug/macho#Section"><code>Section</code></a> struct's new <code>Relocs</code> field
   873  and the new <a href="/pkg/debug/macho/#Reloc"><code>Reloc</code></a>,
   874  <a href="/pkg/debug/macho/#RelocTypeARM"><code>RelocTypeARM</code></a>,
   875  <a href="/pkg/debug/macho/#RelocTypeARM64"><code>RelocTypeARM64</code></a>,
   876  <a href="/pkg/debug/macho/#RelocTypeGeneric"><code>RelocTypeGeneric</code></a>,
   877  and
   878  <a href="/pkg/debug/macho/#RelocTypeX86_64"><code>RelocTypeX86_64</code></a>
   879  types and associated constants.
   880  </p>
   881  <p>
   882  Go 1.10 also adds support for the <code>LC_RPATH</code> load command,
   883  represented by the types
   884  <a href="/pkg/debug/macho/#RpathCmd"><code>RpathCmd</code></a> and
   885  <a href="/pkg/debug/macho/#Rpath"><code>Rpath</code></a>,
   886  and new <a href="/pkg/debug/macho/#pkg-constants">named constants</a>
   887  for the various flag bits found in headers.
   888  </p>
   889  </dl>
   890  
   891  <dl id="encoding/asn1"><dt><a href="/pkg/encoding/asn1/">encoding/asn1</a></dt>
   892  <dd>
   893  <p>
   894  <a href="/pkg/encoding/asn1/#Marshal"><code>Marshal</code></a> now correctly encodes
   895  strings containing asterisks as type UTF8String instead of PrintableString,
   896  unless the string is in a struct field with a tag forcing the use of PrintableString.
   897  <code>Marshal</code> also now respects struct tags containing <code>application</code> directives.
   898  </p>
   899  <p>
   900  The new <a href="/pkg/encoding/asn1/#MarshalWithParams"><code>MarshalWithParams</code></a>
   901  function marshals its argument as if the additional params were its associated
   902  struct field tag.
   903  </p>
   904  <p>
   905  <a href="/pkg/encoding/asn1/#Unmarshal"><code>Unmarshal</code></a> now respects
   906  struct field tags using the <code>explicit</code> and <code>tag</code>
   907  directives.
   908  </p>
   909  <p>
   910  Both <code>Marshal</code> and <code>Unmarshal</code> now support a new struct field tag
   911  <code>numeric</code>, indicating an ASN.1 NumericString.
   912  </p>
   913  </dl>
   914  
   915  <dl id="encoding/csv"><dt><a href="/pkg/encoding/csv/">encoding/csv</a></dt>
   916  <dd>
   917  <p>
   918  <a href="/pkg/encoding/csv/#Reader"><code>Reader</code></a> now disallows the use of
   919  nonsensical <code>Comma</code> and <code>Comment</code> settings,
   920  such as NUL, carriage return, newline, invalid runes, and the Unicode replacement character,
   921  or setting <code>Comma</code> and <code>Comment</code> equal to each other.
   922  </p>
   923  <p>
   924  In the case of a syntax error in a CSV record that spans multiple input lines, <code>Reader</code>
   925  now reports the line on which the record started in the <a href="/pkg/encoding/csv/#ParseError"><code>ParseError</code></a>'s new <code>StartLine</code> field.
   926  </p>
   927  </dl>
   928  
   929  <dl id="encoding/hex"><dt><a href="/pkg/encoding/hex/">encoding/hex</a></dt>
   930  <dd>
   931  <p>
   932  The new functions
   933  <a href="/pkg/encoding/hex/#NewEncoder"><code>NewEncoder</code></a>
   934  and
   935  <a href="/pkg/encoding/hex/#NewDecoder"><code>NewDecoder</code></a>
   936  provide streaming conversions to and from hexadecimal,
   937  analogous to equivalent functions already in
   938  <a href="/pkg/encoding/base32/">encoding/base32</a>
   939  and
   940  <a href="/pkg/encoding/base64/">encoding/base64</a>.
   941  </p>
   942  
   943  <p>
   944  When the functions
   945  <a href="/pkg/encoding/hex/#Decode"><code>Decode</code></a>
   946  and
   947  <a href="/pkg/encoding/hex/#DecodeString"><code>DecodeString</code></a>
   948  encounter malformed input,
   949  they now return the number of bytes already converted
   950  along with the error.
   951  Previously they always returned a count of 0 with any error.
   952  </p>
   953  </dl>
   954  
   955  <dl id="encoding/json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
   956  <dd>
   957  <p>
   958  The <a href="/pkg/encoding/json/#Decoder"><code>Decoder</code></a>
   959  adds a new method
   960  <a href="/pkg/encoding/json/#Decoder.DisallowUnknownFields"><code>DisallowUnknownFields</code></a>
   961  that causes it to report inputs with unknown JSON fields as a decoding error.
   962  (The default behavior has always been to discard unknown fields.)
   963  </p>
   964  
   965  <p>
   966  As a result of <a href="#reflect">fixing a reflect bug</a>,
   967  <a href="/pkg/encoding/json/#Unmarshal"><code>Unmarshal</code></a>
   968  can no longer decode into fields inside
   969  embedded pointers to unexported struct types,
   970  because it cannot initialize the unexported embedded pointer
   971  to point at fresh storage.
   972  <code>Unmarshal</code> now returns an error in this case.
   973  </p>
   974  </dl>
   975  
   976  <dl id="encoding/pem"><dt><a href="/pkg/encoding/pem/">encoding/pem</a></dt>
   977  <dd>
   978  <p>
   979  <a href="/pkg/encoding/pem/#Encode"><code>Encode</code></a>
   980  and
   981  <a href="/pkg/encoding/pem/#EncodeToMemory"><code>EncodeToMemory</code></a>
   982  no longer generate partial output when presented with a
   983  block that is impossible to encode as PEM data.
   984  </p>
   985  </dl>
   986  
   987  <dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
   988  <dd>
   989  <p>
   990  The new function
   991  <a href="/pkg/encoding/xml/#NewTokenDecoder"><code>NewTokenDecoder</code></a>
   992  is like
   993  <a href="/pkg/encoding/xml/#NewDecoder"><code>NewDecoder</code></a>
   994  but creates a decoder reading from a <a href="/pkg/encoding/xml/#TokenReader"><code>TokenReader</code></a>
   995  instead of an XML-formatted byte stream.
   996  This is meant to enable the construction of XML stream transformers in client libraries.
   997  </p>
   998  </dl>
   999  
  1000  <dl id="flag"><dt><a href="/pkg/flag/">flag</a></dt>
  1001  <dd>
  1002  <p>
  1003  The default
  1004  <a href="/pkg/flag/#Usage"><code>Usage</code></a> function now prints
  1005  its first line of output to
  1006  <code>CommandLine.Output()</code>
  1007  instead of assuming <code>os.Stderr</code>,
  1008  so that the usage message is properly redirected for
  1009  clients using <code>CommandLine.SetOutput</code>.
  1010  </p>
  1011  <p>
  1012  <a href="/pkg/flag/#PrintDefaults"><code>PrintDefaults</code></a> now
  1013  adds appropriate indentation after newlines in flag usage strings,
  1014  so that multi-line usage strings display nicely.
  1015  </p>
  1016  <p>
  1017  <a href="/pkg/flag/#FlagSet"><code>FlagSet</code></a> adds new methods
  1018  <a href="/pkg/flag/#FlagSet.ErrorHandling"><code>ErrorHandling</code></a>,
  1019  <a href="/pkg/flag/#FlagSet.Name"><code>Name</code></a>,
  1020  and
  1021  <a href="/pkg/flag/#FlagSet.Output"><code>Output</code></a>,
  1022  to retrieve the settings passed to
  1023  <a href="/pkg/flag/#NewFlagSet"><code>NewFlagSet</code></a>
  1024  and
  1025  <a href="/pkg/flag/#FlagSet.SetOutput"><code>FlagSet.SetOutput</code></a>.
  1026  </p>
  1027  </dl>
  1028  
  1029  <dl id="go/doc"><dt><a href="/pkg/go/doc/">go/doc</a></dt>
  1030  <dd>
  1031  <p>
  1032  To support the <a href="#doc">doc change</a> described above,
  1033  functions returning slices of <code>T</code>, <code>*T</code>, <code>**T</code>, and so on
  1034  are now reported in <code>T</code>'s <a href="/pkg/go/doc/#Type"><code>Type</code></a>'s <code>Funcs</code> list,
  1035  instead of in the <a href="/pkg/go/doc/#Package"><code>Package</code></a>'s <code>Funcs</code> list.
  1036  </p>
  1037  </dl>
  1038  
  1039  <dl id="go/importer"><dt><a href="/pkg/go/importer/">go/importer</a></dt>
  1040  <dd>
  1041  <p>
  1042  The <a href="/pkg/go/importer/#For"><code>For</code></a> function now accepts a non-nil lookup argument.
  1043  </p>
  1044  </dl>
  1045  
  1046  <dl id="go/printer"><dt><a href="/pkg/go/printer/">go/printer</a></dt>
  1047  <dd>
  1048  <p>
  1049  The changes to the default formatting of Go source code
  1050  discussed in the <a href="#gofmt">gofmt section</a> above
  1051  are implemented in the <a href="/pkg/go/printer/">go/printer</a> package
  1052  and also affect the output of the higher-level <a href="/pkg/go/format/">go/format</a> package.
  1053  </p>
  1054  </dl>
  1055  
  1056  <dl id="hash"><dt><a href="/pkg/hash/">hash</a></dt>
  1057  <dd>
  1058  <p>
  1059  Implementations of the <a href="/pkg/hash/#Hash"><code>Hash</code></a> interface are now
  1060  encouraged to implement <a href="/pkg/encoding/#BinaryMarshaler"><code>encoding.BinaryMarshaler</code></a>
  1061  and <a href="/pkg/encoding/#BinaryUnmarshaler"><code>encoding.BinaryUnmarshaler</code></a>
  1062  to allow saving and recreating their internal state,
  1063  and all implementations in the standard library
  1064  (<a href="/pkg/hash/crc32/">hash/crc32</a>, <a href="/pkg/crypto/sha256/">crypto/sha256</a>, and so on)
  1065  now implement those interfaces.
  1066  </p>
  1067  </dl>
  1068  
  1069  <dl id="html/template"><dt><a href="/pkg/html/template/">html/template</a></dt>
  1070  <dd>
  1071  <p>
  1072  The new <a href="/pkg/html/template#Srcset"><code>Srcset</code></a> content
  1073  type allows for proper handling of values within the
  1074  <a href="https://w3c.github.io/html/semantics-embedded-content.html#element-attrdef-img-srcset"><code>srcset</code></a>
  1075  attribute of <code>img</code> tags.
  1076  </p>
  1077  </dl>
  1078  
  1079  <dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt>
  1080  <dd>
  1081  <p>
  1082  <a href="/pkg/math/big/#Int"><code>Int</code></a> now supports conversions to and from bases 2 through 62
  1083  in its <a href="/pkg/math/big/#Int.SetString"><code>SetString</code></a> and <a href="/pkg/math/big/#Text"><code>Text</code></a> methods.
  1084  (Previously it only allowed bases 2 through 36.)
  1085  The value of the constant <code>MaxBase</code> has been updated.
  1086  </p>
  1087  <p>
  1088  <a href="/pkg/math/big/#Int"><code>Int</code></a> adds a new
  1089  <a href="/pkg/math/big/#CmpAbs"><code>CmpAbs</code></a> method
  1090  that is like <a href="/pkg/math/big/#Cmp"><code>Cmp</code></a> but
  1091  compares only the absolute values (not the signs) of its arguments.
  1092  </p>
  1093  <p>
  1094  <a href="/pkg/math/big/#Float"><code>Float</code></a> adds a new
  1095  <a href="/pkg/math/big/#Float.Sqrt"><code>Sqrt</code></a> method to
  1096  compute square roots.
  1097  </p>
  1098  </dl>
  1099  
  1100  <dl id="math/cmplx"><dt><a href="/pkg/math/cmplx/">math/cmplx</a></dt>
  1101  <dd>
  1102  <p>
  1103  Branch cuts and other boundary cases in
  1104  <a href="/pkg/math/cmplx/#Asin"><code>Asin</code></a>,
  1105  <a href="/pkg/math/cmplx/#Asinh"><code>Asinh</code></a>,
  1106  <a href="/pkg/math/cmplx/#Atan"><code>Atan</code></a>,
  1107  and
  1108  <a href="/pkg/math/cmplx/#Sqrt"><code>Sqrt</code></a>
  1109  have been corrected to match the definitions used in the C99 standard.
  1110  </p>
  1111  </dl>
  1112  
  1113  <dl id="math/rand"><dt><a href="/pkg/math/rand/">math/rand</a></dt>
  1114  <dd>
  1115  <p>
  1116  The new <a href="/pkg/math/rand/#Shuffle"><code>Shuffle</code></a> function and corresponding
  1117  <a href="/pkg/math/rand/#Rand.Shuffle"><code>Rand.Shuffle</code></a> method
  1118  shuffle an input sequence.
  1119  </p>
  1120  </dl>
  1121  
  1122  <dl id="math"><dt><a href="/pkg/math/">math</a></dt>
  1123  <dd>
  1124  <p>
  1125  The new functions
  1126  <a href="/pkg/math/#Round"><code>Round</code></a>
  1127  and
  1128  <a href="/pkg/math/#RoundToEven"><code>RoundToEven</code></a>
  1129  round their arguments to the nearest floating-point integer;
  1130  <code>Round</code> rounds a half-integer to its larger integer neighbor (away from zero)
  1131  while <code>RoundToEven</code> rounds a half-integer to its even integer neighbor.
  1132  </p>
  1133  
  1134  <p>
  1135  The new functions
  1136  <a href="/pkg/math/#Erfinv"><code>Erfinv</code></a>
  1137  and
  1138  <a href="/pkg/math/#Erfcinv"><code>Erfcinv</code></a>
  1139  compute the inverse error function and the
  1140  inverse complementary error function.
  1141  </p>
  1142  </dl>
  1143  
  1144  <dl id="mime/multipart"><dt><a href="/pkg/mime/multipart/">mime/multipart</a></dt>
  1145  <dd>
  1146  <p>
  1147  <a href="/pkg/mime/multipart/#Reader"><code>Reader</code></a>
  1148  now accepts parts with empty filename attributes.
  1149  </p>
  1150  </dl>
  1151  
  1152  <dl id="mime"><dt><a href="/pkg/mime/">mime</a></dt>
  1153  <dd>
  1154  <p>
  1155  <a href="/pkg/mime/#ParseMediaType"><code>ParseMediaType</code></a> now discards
  1156  invalid attribute values; previously it returned those values as empty strings.
  1157  </p>
  1158  </dl>
  1159  
  1160  <dl id="net"><dt><a href="/pkg/net/">net</a></dt>
  1161  <dd>
  1162  <p>
  1163  The <a href="/pkg/net/#Conn"><code>Conn</code></a> and
  1164  <a href="/pkg/net/#Conn"><code>Listener</code></a> implementations
  1165  in this package now guarantee that when <code>Close</code> returns,
  1166  the underlying file descriptor has been closed.
  1167  (In earlier releases, if the <code>Close</code> stopped pending I/O
  1168  in other goroutines, the closing of the file descriptor could happen in one of those
  1169  goroutines shortly after <code>Close</code> returned.)
  1170  </p>
  1171  
  1172  <p>
  1173  <a href="/pkg/net/#TCPListener"><code>TCPListener</code></a> and
  1174  <a href="/pkg/net/#UnixListener"><code>UnixListener</code></a>
  1175  now implement
  1176  <a href="/pkg/syscall/#Conn"><code>syscall.Conn</code></a>,
  1177  to allow setting options on the underlying file descriptor
  1178  using <a href="/pkg/syscall/#RawConn"><code>syscall.RawConn.Control</code></a>.
  1179  </p>
  1180  
  1181  <p>
  1182  The <code>Conn</code> implementations returned by <a href="/pkg/net/#Pipe"><code>Pipe</code></a>
  1183  now support setting read and write deadlines.
  1184  </p>
  1185  
  1186  <p>
  1187  The <a href="/pkg/net/#IPConn.ReadMsgIP"><code>IPConn.ReadMsgIP</code></a>,
  1188  <a href="/pkg/net/#IPConn.WriteMsgIP"><code>IPConn.WriteMsgIP</code></a>,
  1189  <a href="/pkg/net/#UDPConn.ReadMsgUDP"><code>UDPConn.ReadMsgUDP</code></a>,
  1190  and
  1191  <a href="/pkg/net/#UDPConn.WriteMsgUDP"><code>UDPConn.WriteMsgUDP</code></a>,
  1192  methods are now implemented on Windows.
  1193  </p>
  1194  </dl>
  1195  
  1196  <dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
  1197  <dd>
  1198  <p>
  1199  On the client side, an HTTP proxy (most commonly configured by
  1200  <a href="/pkg/net/http/#ProxyFromEnvironment"><code>ProxyFromEnvironment</code></a>)
  1201  can now be specified as an <code>https://</code> URL,
  1202  meaning that the client connects to the proxy over HTTPS before issuing a standard, proxied HTTP request.
  1203  (Previously, HTTP proxy URLs were required to begin with <code>http://</code> or <code>socks5://</code>.)
  1204  </p>
  1205  <p>
  1206  On the server side, <a href="/pkg/net/http/#FileServer"><code>FileServer</code></a> and its single-file equivalent <a href="/pkg/net/http/#ServeFile"><code>ServeFile</code></a>
  1207  now apply <code>If-Range</code> checks to <code>HEAD</code> requests.
  1208  <code>FileServer</code> also now reports directory read failures to the <a href="/pkg/net/http/#Server"><code>Server</code></a>'s <code>ErrorLog</code>.
  1209  The content-serving handlers also now omit the <code>Content-Type</code> header when serving zero-length content.
  1210  </p>
  1211  <p>
  1212  <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>'s <code>WriteHeader</code> method now panics
  1213  if passed an invalid (non-3-digit) status code.
  1214  </p>
  1215  <p>
  1216  <a href="/pkg/net/http/#Redirect"><code>Redirect</code></a> now sets the <code>Content-Type</code> header before writing its HTTP response.
  1217  </p>
  1218  </dl>
  1219  
  1220  <dl id="net/mail"><dt><a href="/pkg/net/mail/">net/mail</a></dt>
  1221  <dd>
  1222  <p>
  1223  <a href="/pkg/net/mail/#ParseAddress"><code>ParseAddress</code></a> and
  1224  <a href="/pkg/net/mail/#ParseAddressList"><code>ParseAddressList</code></a>
  1225  now support a variety of obsolete address formats.
  1226  </p>
  1227  </dl>
  1228  
  1229  <dl id="net/smtp"><dt><a href="/pkg/net/smtp/">net/smtp</a></dt>
  1230  <dd>
  1231  <p>
  1232  The <a href="/pkg/net/smtp/#Client"><code>Client</code></a> adds a new
  1233  <a href="/pkg/net/smtp/#Client.Noop"><code>Noop</code></a> method,
  1234  to test whether the server is still responding.
  1235  It also now defends against possible SMTP injection in the inputs
  1236  to the <a href="/pkg/net/smtp/#Client.Hello"><code>Hello</code></a>
  1237  and <a href="/pkg/net/smtp/#Client.Verify"><code>Verify</code></a> methods.
  1238  </p>
  1239  </dl>
  1240  
  1241  <dl id="net/textproto"><dt><a href="/pkg/net/textproto/">net/textproto</a></dt>
  1242  <dd>
  1243  <p>
  1244  <a href="/pkg/net/textproto/#ReadMIMEHeader"><code>ReadMIMEHeader</code></a>
  1245  now rejects any header that begins with a continuation (indented) header line.
  1246  Previously a header with an indented first line was treated as if the first line
  1247  were not indented.
  1248  </p>
  1249  </dl>
  1250  
  1251  <dl id="net/url"><dt><a href="/pkg/net/url/">net/url</a></dt>
  1252  <dd>
  1253  <p>
  1254  <a href="/pkg/net/url/#ResolveReference"><code>ResolveReference</code></a>
  1255  now preserves multiple leading slashes in the target URL.
  1256  Previously it rewrote multiple leading slashes to a single slash,
  1257  which resulted in the <a href="/pkg/net/http/#Client"><code>http.Client</code></a>
  1258  following certain redirects incorrectly.
  1259  </p>
  1260  <p>
  1261  For example, this code's output has changed:
  1262  </p>
  1263  <pre>
  1264  base, _ := url.Parse("http://host//path//to/page1")
  1265  target, _ := url.Parse("page2")
  1266  fmt.Println(base.ResolveReference(target))
  1267  </pre>
  1268  <p>
  1269  Note the doubled slashes around <code>path</code>.
  1270  In Go 1.9 and earlier, the resolved URL was <code>http://host/path//to/page2</code>:
  1271  the doubled slash before <code>path</code> was incorrectly rewritten
  1272  to a single slash, while the doubled slash after <code>path</code> was
  1273  correctly preserved.
  1274  Go 1.10 preserves both doubled slashes, resolving to <code>http://host//path//to/page2</code>
  1275  as required by <a href="https://tools.ietf.org/html/rfc3986#section-5.2">RFC 3986</a>.
  1276  </p>
  1277  
  1278  <p>This change may break existing buggy programs that unintentionally
  1279  construct a base URL with a leading doubled slash in the path and inadvertently
  1280  depend on <code>ResolveReference</code> to correct that mistake.
  1281  For example, this can happen if code adds a host prefix
  1282  like <code>http://host/</code> to a path like <code>/my/api</code>,
  1283  resulting in a URL with a doubled slash: <code>http://host//my/api</code>.
  1284  </p>
  1285  
  1286  <p>
  1287  <a href="/pkg/net/url/#UserInfo"><code>UserInfo</code></a>'s methods
  1288  now treat a nil receiver as equivalent to a pointer to a zero <code>UserInfo</code>.
  1289  Previously, they panicked.
  1290  </p>
  1291  </dl>
  1292  
  1293  <dl id="os"><dt><a href="/pkg/os/">os</a></dt>
  1294  <dd>
  1295  <p>
  1296  <a href="/pkg/os/#File"><code>File</code></a> adds new methods
  1297  <a href="/pkg/os/#File.SetDeadline"><code>SetDeadline</code></a>,
  1298  <a href="/pkg/os/#File.SetReadDeadline"><code>SetReadDeadline</code></a>,
  1299  and
  1300  <a href="/pkg/os/#File.SetWriteDeadline"><code>SetWriteDeadline</code></a>
  1301  that allow setting I/O deadlines when the
  1302  underlying file descriptor supports non-blocking I/O operations.
  1303  The definition of these methods matches those in <a href="/pkg/net/#Conn"><code>net.Conn</code></a>.
  1304  If an I/O method fails due to missing a deadline, it will return a
  1305  timeout error; the
  1306  new <a href="/pkg/os/#IsTimeout"><code>IsTimeout</code></a> function
  1307  reports whether an error represents a timeout.
  1308  </p>
  1309  
  1310  <p>
  1311  Also matching <code>net.Conn</code>,
  1312  <code>File</code>'s
  1313  <a href="/pkg/os/#File.Close"><code>Close</code></a> method
  1314  now guarantee that when <code>Close</code> returns,
  1315  the underlying file descriptor has been closed.
  1316  (In earlier releases,
  1317  if the <code>Close</code> stopped pending I/O
  1318  in other goroutines, the closing of the file descriptor could happen in one of those
  1319  goroutines shortly after <code>Close</code> returned.)
  1320  </p>
  1321  
  1322  <p>
  1323  On BSD, macOS, and Solaris systems,
  1324  <a href="/pkg/os/#Chtimes"><code>Chtimes</code></a>
  1325  now supports setting file times with nanosecond precision
  1326  (assuming the underlying file system can represent them).
  1327  </p>
  1328  </dl>
  1329  
  1330  <dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  1331  <dd>
  1332  <p>
  1333  The <a href="/pkg/reflect/#Copy"><code>Copy</code></a> function now allows copying
  1334  from a string into a byte array or byte slice, to match the
  1335  <a href="/pkg/builtin/#copy">built-in copy function</a>.
  1336  </p>
  1337  
  1338  <p>
  1339  In structs, embedded pointers to unexported struct types were
  1340  previously incorrectly reported with an empty <code>PkgPath</code>
  1341  in the corresponding <a href="/pkg/reflect/#StructField">StructField</a>,
  1342  with the result that for those fields,
  1343  and <a href="/pkg/reflect/#Value.CanSet"><code>Value.CanSet</code></a>
  1344  incorrectly returned true and
  1345  <a href="/pkg/reflect/#Value.Set"><code>Value.Set</code></a>
  1346  incorrectly succeeded.
  1347  The underlying metadata has been corrected;
  1348  for those fields,
  1349  <code>CanSet</code> now correctly returns false
  1350  and <code>Set</code> now correctly panics.
  1351  This may affect reflection-based unmarshalers
  1352  that could previously unmarshal into such fields
  1353  but no longer can.
  1354  For example, see the <a href="#encoding/json"><code>encoding/json</code> notes</a>.
  1355  </p>
  1356  </dl>
  1357  
  1358  <dl id="runtime/pprof"><dt><a href="/pkg/runtime/pprof/">runtime/pprof</a></dt>
  1359  <dd>
  1360  <p>
  1361  As <a href="#pprof">noted above</a>, the blocking and mutex profiles
  1362  now include symbol information so that they can be viewed without needing
  1363  the binary that generated them.
  1364  </p>
  1365  </dl>
  1366  
  1367  <dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
  1368  <dd>
  1369  <p>
  1370  <a href="/pkg/strconv/#ParseUint"><code>ParseUint</code></a> now returns
  1371  the maximum magnitude integer of the appropriate size
  1372  with any <code>ErrRange</code> error, as it was already documented to do.
  1373  Previously it returned 0 with <code>ErrRange</code> errors.
  1374  </p>
  1375  </dl>
  1376  
  1377  <dl id="strings"><dt><a href="/pkg/strings/">strings</a></dt>
  1378  <dd>
  1379  <p>
  1380  A new type
  1381  <a href="/pkg/strings/#Builder"><code>Builder</code></a> is a replacement for
  1382  <a href="/pkg/bytes/#Buffer"><code>bytes.Buffer</code></a> for the use case of
  1383  accumulating text into a <code>string</code> result.
  1384  The <code>Builder</code>'s API is a restricted subset of <code>bytes.Buffer</code>'s
  1385  that allows it to safely avoid making a duplicate copy of the data
  1386  during the <a href="/pkg/strings/#Builder.String"><code>String</code></a> method.
  1387  </p>
  1388  </dl>
  1389  
  1390  <dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
  1391  <dd>
  1392  <p>
  1393  On Windows,
  1394  the new <a href="/pkg/syscall/#SysProcAttr"><code>SysProcAttr</code></a> field <code>Token</code>,
  1395  of type <a href="/pkg/syscall/#Token"><code>Token</code></a> allows the creation of a process that
  1396  runs as another user during <a href="/pkg/syscall/#StartProcess"><code>StartProcess</code></a>
  1397  (and therefore also during <a href="/pkg/os/#StartProcess"><code>os.StartProcess</code></a> and
  1398  <a href="/pkg/os/exec/#Cmd.Start"><code>exec.Cmd.Start</code></a>).
  1399  The new function <a href="/pkg/syscall/#CreateProcessAsUser"><code>CreateProcessAsUser</code></a>
  1400  gives access to the underlying system call.
  1401  </p>
  1402  
  1403  <p>
  1404  On BSD, macOS, and Solaris systems, <a href="/pkg/syscall/#UtimesNano"><code>UtimesNano</code></a>
  1405  is now implemented.
  1406  </p>
  1407  </dl>
  1408  
  1409  <dl id="time"><dt><a href="/pkg/time/">time</a></dt>
  1410  <dd>
  1411  <p>
  1412  <a href="/pkg/time/#LoadLocation"><code>LoadLocation</code></a> now uses the directory
  1413  or uncompressed zip file named by the <code>$ZONEINFO</code>
  1414  environment variable before looking in the default system-specific list of
  1415  known installation locations or in <code>$GOROOT/lib/time/zoneinfo.zip</code>.
  1416  </p>
  1417  <p>
  1418  The new function <a href="/pkg/time/#LoadLocationFromTZData"><code>LoadLocationFromTZData</code></a>
  1419  allows conversion of IANA time zone file data to a <a href="/pkg/time/#Location"><code>Location</code></a>.
  1420  </p>
  1421  </dl>
  1422  
  1423  <dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
  1424  <dd>
  1425  <p>
  1426  The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated
  1427  support throughout the system has been upgraded from Unicode 9.0 to
  1428  <a href="http://www.unicode.org/versions/Unicode10.0.0/">Unicode 10.0</a>,
  1429  which adds 8,518 new characters, including four new scripts, one new property,
  1430  a Bitcoin currency symbol, and 56 new emoji.
  1431  </p>
  1432  </dl>