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