blob: 569e420d51f0a0a8a35d01a78e72caa424414e37 [file] [log] [blame]
Russ Cox04344262017-11-15 15:44:09 -05001<!--{
2 "Title": "Go 1.10 Release Notes",
3 "Path": "/doc/go1.10",
4 "Template": true
5}-->
6
7<!--
8NOTE: In this document and others in this directory, the convention is to
9set fixed-width phrases with non-fixed-width spaces, as in
10<code>hello</code> <code>world</code>.
11Do not send CLs removing the interior tags from such phrases.
12-->
13
14<style>
15ul 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>
Russ Cox4a2f28f2018-01-22 12:56:01 -050026The latest Go release, version 1.10, arrives six months after <a href="go1.9">Go 1.9</a>.
Russ Cox04344262017-11-15 15:44:09 -050027Most of its changes are in the implementation of the toolchain, runtime, and libraries.
28As always, the release maintains the Go 1 <a href="/doc/go1compat.html">promise of compatibility</a>.
29We expect almost all Go programs to continue to compile and run as before.
30</p>
31
32<p>
Russ Cox21a460d2018-01-18 10:22:11 -050033This release improves <a href="#build">caching of built packages</a>,
34adds <a href="#test">caching of successful test results</a>,
35runs <a href="#test-vet">vet automatically during tests</a>,
36and
37permits <a href="#cgo">passing string values directly between Go and C using cgo</a>.
Russ Cox04344262017-11-15 15:44:09 -050038</p>
39
40<h2 id="language">Changes to the language</h2>
41
42<p>
Russ Cox4a2f28f2018-01-22 12:56:01 -050043There are no significant changes to the language specification.
Russ Cox04344262017-11-15 15:44:09 -050044</p>
45
46<p><!-- CL 60230 -->
47A corner case involving shifts by untyped constants has been clarified,
48and 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;
50the <a href="/pkg/go/types/">go/types</a> package already did.
51</p>
52
53<p><!-- CL 73233 -->
54The grammar for method expressions has been updated to relax the
55syntax to allow any type expression as a receiver;
56this matches what the compilers were already implementing.
57For example, <code>struct{io.Reader}.Read</code> is a valid, if unusual,
58method expression that the compilers already accepted and is
59now permitted by the language grammar.
60</p>
61
62<h2 id="ports">Ports</h2>
63
64<p>
65There are no new supported operating systems or processor architectures in this release.
66Most of the work has focused on strengthening the support for existing ports,
67in particular <a href="#asm">new instructions in the assembler</a>
68and improvements to the code generated by the compilers.
69</p>
70
Russ Coxd6280902017-12-05 22:20:46 -050071<p id="freebsd">
72As <a href="go1.9#freebsd">announced in the Go 1.9 release notes</a>,
73Go 1.10 now requires FreeBSD 10.3 or later;
74support for FreeBSD 9.3 has been removed.
75</p>
76
Brad Fitzpatrick617fc0f2017-12-06 18:44:13 +000077<p id="netbsd">
Russ Cox81c19cc2017-12-13 11:00:14 -050078Go now runs on NetBSD again but requires the unreleased NetBSD 8.
Brad Fitzpatrick513a4692017-12-13 21:18:28 +000079Only <code>GOARCH</code> <code>amd64</code> and <code>386</code> have
80been fixed. The <code>arm</code> port is still broken.
Brad Fitzpatrick617fc0f2017-12-06 18:44:13 +000081</p>
82
Russ Coxd6280902017-12-05 22:20:46 -050083<p id="mips">
84On 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
87hardware instructions or software emulation for floating-point computations.
88</p>
89
Russ Coxe7303a72018-01-10 11:18:59 -050090<p id="openbsd">
91Go 1.10 is the last release that will run on OpenBSD 6.0.
92Go 1.11 will require OpenBSD 6.2.
93</p>
94
95<p id="darwin">
96Go 1.10 is the last release that will run on OS X 10.8 Mountain Lion or OS X 10.9 Mavericks.
97Go 1.11 will require OS X 10.10 Yosemite or later.
98</p>
99
100<p id="windows">
101Go 1.10 is the last release that will run on Windows XP or Windows Vista.
102Go 1.11 will require Windows 7 or later.
103</p>
104
Russ Cox04344262017-11-15 15:44:09 -0500105<h2 id="tools">Tools</h2>
106
107<h3 id="goroot">Default GOROOT &amp; GOTMPDIR</h3>
108
109<p>
Russ Cox23aefcd2018-01-09 16:45:27 -0500110If the environment variable <code>$GOROOT</code> is unset,
111the go tool previously used the default <code>GOROOT</code>
112set during toolchain compilation.
113Now, before falling back to that default, the go tool attempts to
114deduce <code>GOROOT</code> from its own executable path.
115This allows binary distributions to be unpacked anywhere in the
116file system and then be used without setting <code>GOROOT</code>
117explicitly.
Russ Cox04344262017-11-15 15:44:09 -0500118</p>
119
120<p>
121By default, the go tool creates its temporary files and directories
122in the system temporary directory (for example, <code>$TMPDIR</code> on Unix).
123If the new environment variable <code>$GOTMPDIR</code> is set,
124the 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>
130The <code>go</code>&nbsp;<code>build</code> command now detects out-of-date packages
131purely based on the content of source files, specified build flags, and metadata stored in the compiled packages.
132Modification times are no longer consulted or relevant.
133The old advice to add <code>-a</code> to force a rebuild in cases where
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500134the modification times were misleading for one reason or another
Russ Cox04344262017-11-15 15:44:09 -0500135(for example, changes in build flags) is no longer necessary:
136builds now always detect when packages must be rebuilt.
137(If you observe otherwise, please file a bug.)
138</p>
139
140<p>
141The <code>go</code>&nbsp;<code>build</code> <code>-asmflags</code>, <code>-gcflags</code>, <code>-gccgoflags</code>, and <code>-ldflags</code> options
142now apply by default only to the packages listed directly on the command line.
143For example, <code>go</code> <code>build</code> <code>-gcflags=-m</code> <code>mypkg</code>
144passes the compiler the <code>-m</code> flag when building <code>mypkg</code>
145but not its dependencies.
146The new, more general form <code>-asmflags=pattern=flags</code> (and similarly for the others)
147applies the <code>flags</code> only to the packages matching the pattern.
148For example: <code>go</code> <code>install</code> <code>-ldflags=cmd/gofmt=-X=main.version=1.2.3</code> <code>cmd/...</code>
149installs all the commands matching <code>cmd/...</code> but only applies the <code>-X</code> option
150to the linker flags for <code>cmd/gofmt</code>.
Russ Coxc56fda62017-12-06 00:01:26 -0500151For more details, see <a href="/cmd/go/#hdr-Compile_packages_and_dependencies"><code>go</code> <code>help</code> <code>build</code></a>.
Russ Cox04344262017-11-15 15:44:09 -0500152</p>
153
154<p>
155The <code>go</code>&nbsp;<code>build</code> command now maintains a cache of
156recently built packages, separate from the installed packages in <code>$GOROOT/pkg</code> or <code>$GOPATH/pkg</code>.
157The effect of the cache should be to speed builds that do not explicitly install packages
158or when switching between different copies of source code (for example, when changing
159back and forth between different branches in a version control system).
160The old advice to add the <code>-i</code> flag for speed, as in <code>go</code> <code>build</code> <code>-i</code>
161or <code>go</code> <code>test</code> <code>-i</code>,
162is no longer necessary: builds run just as fast without <code>-i</code>.
Russ Cox23aefcd2018-01-09 16:45:27 -0500163For more details, see <a href="/cmd/go/#hdr-Build_and_test_caching"><code>go</code> <code>help</code> <code>cache</code></a>.
Russ Cox04344262017-11-15 15:44:09 -0500164</p>
165
166<p>
Tobias Klauserd1fa5872017-12-08 14:43:40 +0100167The <code>go</code>&nbsp;<code>install</code> command now installs only the
Russ Cox04344262017-11-15 15:44:09 -0500168packages and commands listed directly on the command line.
169For example, <code>go</code> <code>install</code> <code>cmd/gofmt</code>
170installs the gofmt program but not any of the packages on which it depends.
171The new build cache makes future commands still run as quickly as if the
172dependencies had been installed.
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500173To force the installation of dependencies, use the new
Russ Cox04344262017-11-15 15:44:09 -0500174<code>go</code> <code>install</code> <code>-i</code> flag.
Russ Cox8114a852017-12-05 23:36:53 -0500175Installing dependency packages should not be necessary in general,
176and the very concept of installed packages may disappear in a future release.
Russ Cox04344262017-11-15 15:44:09 -0500177</p>
178
179<p>
180Many details of the <code>go</code>&nbsp;<code>build</code> implementation have changed to support these improvements.
181One new requirement implied by these changes is that
182binary-only packages must now declare accurate import blocks in their
183stub source code, so that those imports can be made available when
184linking a program using the binary-only package.
Russ Coxc56fda62017-12-06 00:01:26 -0500185For more details, see <a href="/cmd/go/#hdr-File_types"><code>go</code> <code>help</code> <code>filetype</code></a>.
Russ Cox04344262017-11-15 15:44:09 -0500186</p>
187
188<h3 id="test">Test</h3>
189
190<p>
191The <code>go</code>&nbsp;<code>test</code> command now caches test results:
192if the test executable and command line match a previous run
193and the files and environment variables consulted by that run
194have not changed either, <code>go</code> <code>test</code> will print
195the previous test output, replacing the elapsed time with the string “(cached).”
196Test caching applies only to successful test results;
197only to <code>go</code> <code>test</code>
198commands with an explicit list of packages; and
199only 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.
202The idiomatic way to bypass test caching is to use <code>-count=1</code>.
203</p>
204
Russ Cox4a2f28f2018-01-22 12:56:01 -0500205<p id="test-vet">
Russ Cox04344262017-11-15 15:44:09 -0500206The <code>go</code>&nbsp;<code>test</code> command now automatically runs
207<code>go</code> <code>vet</code> on the package being tested,
208to identify significant problems before running the test.
209Any such problems are treated like build errors and prevent execution of the test.
210Only a high-confidence subset of the available <code>go</code> <code>vet</code>
211checks are enabled for this automatic check.
212To 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>
217The <code>go</code> <code>test</code> <code>-coverpkg</code> flag now
218interprets its argument as a comma-separated list of patterns to match against
219the dependencies of each test, not as a list of packages to load anew.
220For example, <code>go</code> <code>test</code> <code>-coverpkg=all</code>
221is now a meaningful way to run a test with coverage enabled for the test package
222and all its dependencies.
223Also, the <code>go</code> <code>test</code> <code>-coverprofile</code> option is now
224supported when running multiple tests.
225</p>
226
227<p>
228In case of failure due to timeout, tests are now more likely to write their profiles before exiting.
229</p>
230
231<p>
232The <code>go</code>&nbsp;<code>test</code> command now always
233merges the standard output and standard error from a given test binary execution
234and writes both to <code>go</code> <code>test</code>'s standard output.
235In past releases, <code>go</code> <code>test</code> only applied this
236merging most of the time.
237</p>
238
239<p>
240The <code>go</code>&nbsp;<code>test</code> <code>-v</code> output
241now includes <code>PAUSE</code> and <code>CONT</code> status update
Russ Cox8114a852017-12-05 23:36:53 -0500242lines to mark when <a href="/pkg/testing/#T.Parallel">parallel tests</a> pause and continue.
Russ Cox04344262017-11-15 15:44:09 -0500243</p>
244
245<p>
Russ Coxd6280902017-12-05 22:20:46 -0500246The new <code>go</code> <code>test</code> <code>-failfast</code> flag
247disables running additional tests after any test fails.
248Note that tests running in parallel with the failing test are allowed to complete.
249</p>
250
251<p>
Russ Cox04344262017-11-15 15:44:09 -0500252Finally, the new <code>go</code> <code>test</code> <code>-json</code> flag
253filters test output through the new command
254<code>go</code> <code>tool</code> <code>test2json</code>
255to produce a machine-readable JSON-formatted description of test execution.
Russ Coxd6280902017-12-05 22:20:46 -0500256This allows the creation of rich presentations of test execution
Russ Cox04344262017-11-15 15:44:09 -0500257in IDEs and other tools.
258</p>
259
260
261<p>
262For more details about all these changes,
Russ Coxd6280902017-12-05 22:20:46 -0500263see <a href="/cmd/go/#hdr-Test_packages"><code>go</code> <code>help</code> <code>test</code></a>
Russ Cox04344262017-11-15 15:44:09 -0500264and the <a href="/cmd/test2json/">test2json documentation</a>.
265</p>
266
267<h3 id="cgo">Cgo</h3>
268
269<p>
Russ Cox4a2f28f2018-01-22 12:56:01 -0500270Cgo now implements a C typedef like “<code>typedef</code> <code>X</code> <code>Y</code>” using a Go type alias,
Russ Cox04344262017-11-15 15:44:09 -0500271so that Go code may use the types <code>C.X</code> and <code>C.Y</code> interchangeably.
272It also now supports the use of niladic function-like macros.
273Also, the documentation has been updated to clarify that
274Go structs and Go arrays are not supported in the type signatures of cgo-exported functions.
275</p>
276
277<p>
Russ Cox21a460d2018-01-18 10:22:11 -0500278Cgo now supports direct access to Go string values from C.
279Functions in the C preamble may use the type <code>_GoString_</code>
Kevin Burke00587e82018-01-25 11:26:54 -0800280to accept a Go string as an argument.
Russ Cox21a460d2018-01-18 10:22:11 -0500281C code may call <code>_GoStringLen</code> and <code>_GoStringPtr</code>
Kevin Burke00587e82018-01-25 11:26:54 -0800282for direct access to the contents of the string.
Russ Cox21a460d2018-01-18 10:22:11 -0500283A value of type <code>_GoString_</code>
284may be passed in a call to an exported Go function that takes an argument of Go type <code>string</code>.
Russ Coxd6280902017-12-05 22:20:46 -0500285</p>
286
287<p>
Russ Cox04344262017-11-15 15:44:09 -0500288During toolchain bootstrap, the environment variables <code>CC</code> and <code>CC_FOR_TARGET</code> specify
289the default C compiler that the resulting toolchain will use for host and target builds, respectively.
290However, 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>).
292The new set of environment variables <code>CC_FOR_<i>goos</i>_<i>goarch</i></code>
293allows specifying a different default C compiler for each target.
294Note that these variables only apply during toolchain bootstrap,
295to set the defaults used by the resulting toolchain.
Russ Cox4a2f28f2018-01-22 12:56:01 -0500296Later <code>go</code> <code>build</code> commands use the <code>CC</code> environment
Russ Cox04344262017-11-15 15:44:09 -0500297variable or else the built-in default.
Russ Coxd6280902017-12-05 22:20:46 -0500298</p>
299
300<p>
Keith Randall25363de2017-12-08 08:38:15 -0800301Cgo now translates some C types that would normally map to a pointer
302type in Go, to a <code>uintptr</code> instead. These types include
303the <code>CFTypeRef</code> hierarchy in Darwin's CoreFoundation
304framework and the <code>jobject</code> hierarchy in Java's JNI
305interface.
306</p>
307
308<p>
309These types must be <code>uintptr</code> on the Go side because they
310would otherwise confuse the Go garbage collector; they are sometimes
Russ Cox4a2f28f2018-01-22 12:56:01 -0500311not really pointers but data structures encoded in a pointer-sized integer.
312Pointers to Go memory must not be stored in these <code>uintptr</code> values.
Keith Randall25363de2017-12-08 08:38:15 -0800313</p>
314
315<p>
316Because of this change, values of the affected types need to be
317zero-initialized with the constant <code>0</code> instead of the
318constant <code>nil</code>. Go 1.10 provides <code>gofix</code>
319modules to help with that rewrite:
Russ Coxb26c88d2018-01-09 15:52:01 -0500320</p>
321
Keith Randall25363de2017-12-08 08:38:15 -0800322<pre>
Tobias Klauserfa904422017-12-14 10:48:53 +0100323go tool fix -r cftype &lt;pkg&gt;
324go tool fix -r jni &lt;pkg&gt;
Keith Randall25363de2017-12-08 08:38:15 -0800325</pre>
Keith Randall25363de2017-12-08 08:38:15 -0800326
327<p>
Russ Cox04344262017-11-15 15:44:09 -0500328For more details, see the <a href="/cmd/cgo/">cgo documentation</a>.
329</p>
330
331<h3 id="doc">Doc</h3>
332
333<p>
334The <code>go</code>&nbsp;<code>doc</code> tool now adds functions returning slices of <code>T</code> or <code>*T</code>
335to the display of type <code>T</code>, similar to the existing behavior for functions returning single <code>T</code> or <code>*T</code> results.
336For example:
337</p>
338
339<pre>
340$ go doc mail.Address
341package mail // import "net/mail"
342
343type Address struct {
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500344 Name string
Russ Cox04344262017-11-15 15:44:09 -0500345 Address string
346}
347 Address represents a single mail address.
348
349func ParseAddress(address string) (*Address, error)
350func ParseAddressList(list string) ([]*Address, error)
351func (a *Address) String() string
352$
353</pre>
354
355<p>
356Previously, <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>
362The <code>go</code>&nbsp;<code>fix</code> tool now replaces imports of <code>"golang.org/x/net/context"</code>
363with <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>
370The <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>
376The blocking and mutex profiles produced by the <code>runtime/pprof</code> package
377now include symbol information, so they can be viewed
378in <code>go</code> <code>tool</code> <code>pprof</code>
379without 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>
Alberto Donizetti8f6e8f92018-01-15 14:17:43 +0100384The <a href="/cmd/pprof/"><code>go</code>&nbsp;<code>tool</code>&nbsp;<code>pprof</code></a>
385profile visualizer has been updated to git version 9e20b5b (2017-11-08)
386from <a href="https://github.com/google/pprof">github.com/google/pprof</a>,
Russ Cox8114a852017-12-05 23:36:53 -0500387which includes an updated web interface.
Russ Cox04344262017-11-15 15:44:09 -0500388</p>
389
390<h3 id="vet">Vet</h3>
391
392<p>
Russ Cox8114a852017-12-05 23:36:53 -0500393The <a href="/cmd/vet/"><code>go</code>&nbsp;<code>vet</code></a> command now always has access to
Russ Cox04344262017-11-15 15:44:09 -0500394complete, up-to-date type information when checking packages, even for packages using cgo or vendored imports.
395The reports should be more accurate as a result.
396Note that only <code>go</code>&nbsp;<code>vet</code> has access to this information;
397the more low-level <code>go</code>&nbsp;<code>tool</code>&nbsp;<code>vet</code> does not
398and 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>
406This 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>
Russ Coxd6280902017-12-05 22:20:46 -0500412Two minor details of the default formatting of Go source code have changed.
413First, certain complex three-index slice expressions previously formatted like
Russ Cox04344262017-11-15 15:44:09 -0500414<code>x[i+1</code>&nbsp;<code>:</code>&nbsp;<code>j:k]</code> and now
415format with more consistent spacing: <code>x[i+1</code>&nbsp;<code>:</code>&nbsp;<code>j</code>&nbsp;<code>:</code>&nbsp;<code>k]</code>.
416Second, single-method interface literals written on a single line,
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500417which are sometimes used in type assertions,
Russ Cox04344262017-11-15 15:44:09 -0500418are no longer split onto multiple lines.
Russ Cox04344262017-11-15 15:44:09 -0500419</p>
420
421<p>
422Note that these kinds of minor updates to gofmt are expected from time to time.
423In general, we recommend against building systems that check that source code
424matches the output of a specific version of gofmt.
425For example, a continuous integration test that fails if any code already checked into
426a repository is not “properly formatted” is inherently fragile and not recommended.
427</p>
428
429<p>
430If multiple programs must agree about which version of gofmt is used to format a source file,
431we recommend that they do this by arranging to invoke the same gofmt binary.
Russ Cox23aefcd2018-01-09 16:45:27 -0500432For example, in the Go open source repository, our Git pre-commit hook is written in Go
Russ Cox4a2f28f2018-01-22 12:56:01 -0500433and could import <code>go/format</code> directly, but instead it invokes the <code>gofmt</code>
Russ Cox23aefcd2018-01-09 16:45:27 -0500434binary found in the current path, so that the pre-commit hook need not be recompiled
435each time <code>gofmt</code> changes.
Russ Cox04344262017-11-15 15:44:09 -0500436</p>
437
438<h3 id="compiler">Compiler Toolchain</h3>
439
440<p>
441The compiler includes many improvements to the performance of generated code,
442spread fairly evenly across the supported architectures.
443</p>
444
445<p>
Russ Cox8114a852017-12-05 23:36:53 -0500446The DWARF debug information recorded in binaries has been improved in a few ways:
447constant values are now recorded;
448line number information is more accurate, making source-level stepping through a program work better;
449and each package is now presented as its own DWARF compilation unit.
Russ Cox04344262017-11-15 15:44:09 -0500450</p>
451
452<p>
Russ Cox04344262017-11-15 15:44:09 -0500453The various <a href="https://docs.google.com/document/d/1nr-TQHw_er6GOQRsF6T43GGhFDelrAP0NqSS_00RgZQ/edit">build modes</a>
Russ Cox4a2f28f2018-01-22 12:56:01 -0500454have been ported to more systems.
Russ Cox04344262017-11-15 15:44:09 -0500455Specifically, <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;
Brad Fitzpatrick132b5282017-12-13 01:20:02 +0000457and <code>plugin</code> now works on <code>linux/ppc64le</code> and <code>darwin/amd64</code>.
Russ Cox04344262017-11-15 15:44:09 -0500458</p>
459
460<p>
461The <code>linux/ppc64le</code> port now requires the use of external linking
462with any programs that use cgo, even uses by the standard library.
463</p>
464
465<h3 id="asm">Assembler</h3>
466
467<p>
468For 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>,
494and
495<code><small>XTAHU</small></code>.
496</p>
497
498<p>
499For 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>,
513and
514<code><small>VST1</small></code>
515instructions.
516</p>
517
518<p>
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500519For the PowerPC 64-bit port, the assembler now supports the POWER9 instructions
Russ Cox04344262017-11-15 15:44:09 -0500520<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>,
534and
535<code><small>VMSUMUDM</small></code>.
536</p>
537
538<p>
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500539For the S390X port, the assembler now supports the
Russ Cox04344262017-11-15 15:44:09 -0500540<code><small>TMHH</small></code>,
541<code><small>TMHL</small></code>,
542<code><small>TMLH</small></code>,
543and
544<code><small>TMLL</small></code>
545instructions.
546</p>
547
548<p>
Russ Cox8114a852017-12-05 23:36:53 -0500549For the X86 64-bit port, the assembler now supports 359 new instructions,
550including the full AVX, AVX2, BMI, BMI2, F16C, FMA3, SSE2, SSE3, SSSE3, SSE4.1, and SSE4.2 extension sets.
Russ Cox04344262017-11-15 15:44:09 -0500551The assembler also no longer implements <code><small>MOVL</small></code>&nbsp;<code><small>$0,</small></code>&nbsp;<code><small>AX</small></code>
552as an <code><small>XORL</small></code> instruction,
553to avoid clearing the condition flags unexpectedly.
554</p>
555
556<h3 id="gccgo">Gccgo</h3>
557
558<p>
Russ Cox21a460d2018-01-18 10:22:11 -0500559Due to the alignment of Go's semiannual release schedule with GCC's
560annual release schedule,
561GCC release 7 contains the Go 1.8.3 version of gccgo.
562We expect that the next release, GCC 8, will contain the Go 1.10
563version of gccgo.
Russ Cox04344262017-11-15 15:44:09 -0500564</p>
565
566<h2 id="runtime">Runtime</h2>
567
568<p>
Russ Cox8114a852017-12-05 23:36:53 -0500569The 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>
572has changed.
573These functions control whether a goroutine is locked to a specific operating system thread,
574so that the goroutine only runs on that thread, and the thread only runs that goroutine.
575Previously, calling <code>LockOSThread</code> more than once in a row
576was equivalent to calling it once, and a single <code>UnlockOSThread</code>
577always unlocked the thread.
578Now, the calls nest: if <code>LockOSThread</code> is called multiple times,
579<code>UnlockOSThread</code> must be called the same number of times
580in order to unlock the thread.
581Existing code that was careful not to nest these calls will remain correct.
582Existing code that incorrectly assumed the calls nested will become correct.
Russ Cox4a2f28f2018-01-22 12:56:01 -0500583Most uses of these functions in public Go source code falls into the second category.
Russ Cox8114a852017-12-05 23:36:53 -0500584</p>
585
586<p>
587Because one common use of <code>LockOSThread</code> and <code>UnlockOSThread</code>
588is to allow Go code to reliably modify thread-local state (for example, Linux or Plan 9 name spaces),
589the runtime now treats locked threads as unsuitable for reuse or for creating new threads.
Russ Cox04344262017-11-15 15:44:09 -0500590</p>
591
592<p>
593Stack traces no longer include implicit wrapper functions (previously marked <code>&lt;autogenerated&gt;</code>),
594unless a fault or panic happens in the wrapper itself.
Russ Cox8114a852017-12-05 23:36:53 -0500595As a result, skip counts passed to functions like <a href="/pkg/runtime/#Caller"><code>Caller</code></a>
596should now always match the structure of the code as written, rather than depending on
597optimization decisions and implementation details.
Russ Cox04344262017-11-15 15:44:09 -0500598</p>
599
600<p>
Russ Cox23aefcd2018-01-09 16:45:27 -0500601The garbage collector has been modified to reduce its impact on allocation latency.
602It now uses a smaller fraction of the overall CPU when running, but it may run more of the time.
603The total CPU consumed by the garbage collector has not changed significantly.
Russ Cox04344262017-11-15 15:44:09 -0500604</p>
605
Russ Coxc56fda62017-12-06 00:01:26 -0500606<p>
Russ Cox23aefcd2018-01-09 16:45:27 -0500607The <a href="/pkg/runtime/#GOROOT"><code>GOROOT</code></a> function
608now defaults (when the <code>$GOROOT</code> environment variable is not set)
609to the <code>GOROOT</code> or <code>GOROOT_FINAL</code> in effect
610at the time the calling program was compiled.
611Previously it used the <code>GOROOT</code> or <code>GOROOT_FINAL</code> in effect
612at the time the toolchain that compiled the calling program was compiled.
613</p>
614
615<p>
616There 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.)
Russ Coxc56fda62017-12-06 00:01:26 -0500618</p>
619
Russ Cox04344262017-11-15 15:44:09 -0500620<h2 id="performance">Performance</h2>
621
622<p>
623As always, the changes are so general and varied that precise
624statements about performance are difficult to make. Most programs
625should run a bit faster, due to speedups in the garbage collector,
626better generated code, and optimizations in the core library.
627</p>
628
629<h2 id="gc">Garbage Collector</h2>
630
631<p>
Russ Cox8114a852017-12-05 23:36:53 -0500632Many applications should experience significantly lower allocation latency and overall performance overhead when the garbage collector is active.
Russ Cox04344262017-11-15 15:44:09 -0500633</p>
634
635<h2 id="library">Core library</h2>
636
637<p>
638All of the changes to the standard library are minor.
639The changes in <a href="#bytes">bytes</a>
640and <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>
646As always, there are various minor changes and updates to the library,
647made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a>
648in mind.
649</p>
650
651<dl id="archive/tar"><dt><a href="/pkg/archive/tar/">archive/tar</a></dt>
652<dd>
653<p>
654In 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
658recorded 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)
660in the returned <a href="/pkg/archive/tar/#Header"><code>Header</code></a>.
661Now it also records the user and group names corresponding to those IDs,
662as well as the major and minor device numbers for device files.
663</p>
664<p>
Russ Cox04344262017-11-15 15:44:09 -0500665The new <a href="/pkg/archive/tar/#Header"><code>Header.Format</code></a> field
666of type <a href="/pkg/archive/tar/#Format"><code>Format</code></a>
667controls which tar header format the <a href="/pkg/archive/tar/#Writer"><code>Writer</code></a> uses.
668The default, as before, is to select the most widely-supported header type
Russ Cox8114a852017-12-05 23:36:53 -0500669that can encode the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU).
Russ Cox04344262017-11-15 15:44:09 -0500670The <a href="/pkg/archive/tar/#Reader"><code>Reader</code></a> sets <code>Header.Format</code> for each header it reads.
671</p>
672<p>
Russ Cox8114a852017-12-05 23:36:53 -0500673<code>Reader</code> and the <code>Writer</code> now support arbitrary PAX records,
674using the new <a href="/pkg/archive/tar/#Header"><code>Header.PAXRecords</code></a> field,
675a generalization of the existing <code>Xattrs</code> field.
Russ Cox04344262017-11-15 15:44:09 -0500676</p>
677<p>
678The <code>Reader</code> no longer insists that the file name or link name in GNU headers
679be valid UTF-8.
680</p>
681<p>
682When writing PAX- or GNU-format headers, the <code>Writer</code> now includes
683the <code>Header.AccessTime</code> and <code>Header.ChangeTime</code> fields (if set).
684When writing PAX-format headers, the times include sub-second precision.
685</p>
Russ Cox04344262017-11-15 15:44:09 -0500686</dl>
687
688<dl id="archive/zip"><dt><a href="/pkg/archive/zip/">archive/zip</a></dt>
689<dd>
690<p>
691Go 1.10 adds more complete support for times and character set encodings in ZIP archives.
692</p>
693<p>
694The original ZIP format used the standard MS-DOS encoding of year, month, day, hour, minute, and second into fields in two 16-bit values.
695That encoding cannot represent time zones or odd seconds, so multiple extensions have been
696introduced to allow richer encodings.
697In 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>
698now support the widely-understood Info-Zip extension that encodes the time separately in the 32-bit Unix “seconds since epoch” form.
699The <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>
700obsoletes the <code>ModifiedTime</code> and <code>ModifiedDate</code> fields, which continue to hold the MS-DOS encoding.
Russ Cox04344262017-11-15 15:44:09 -0500701The <code>Reader</code> and <code>Writer</code> now adopt the common
Russ Cox8114a852017-12-05 23:36:53 -0500702convention that a ZIP archive storing a time zone-independent Unix time
703also stores the local time in the MS-DOS field,
704so that the time zone offset can be inferred.
Russ Coxd6280902017-12-05 22:20:46 -0500705For 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
707behave the same as in earlier releases; new code should use <code>Modified</code> directly.
Russ Cox04344262017-11-15 15:44:09 -0500708</p>
709<p>
710The header for each file in a ZIP archive has a flag bit indicating whether
711the name and comment fields are encoded as UTF-8, as opposed to a system-specific default encoding.
712In Go 1.8 and earlier, the <code>Writer</code> never set the UTF-8 bit.
713In Go 1.9, the <code>Writer</code> changed to set the UTF-8 bit almost always.
714This broke the creation of ZIP archives containing Shift-JIS file names.
715In Go 1.10, the <code>Writer</code> now sets the UTF-8 bit only when
716both the name and the comment field are valid UTF-8 and at least one is non-ASCII.
717Because non-ASCII encodings very rarely look like valid UTF-8, the new
718heuristic should be correct nearly all the time.
719Setting a <code>FileHeader</code>'s new <code>NonUTF8</code> field to true
720disables the heuristic entirely for that file.
721</p>
722<p>
Russ Coxd6280902017-12-05 22:20:46 -0500723The <code>Writer</code> also now supports setting the end-of-central-directory record's comment field,
724by calling the <code>Writer</code>'s new <a href="/pkg/archive/zip/#Writer.SetComment"><code>SetComment</code></a> method.
Russ Cox04344262017-11-15 15:44:09 -0500725</p>
726</dl>
727
728<dl id="bufio"><dt><a href="/pkg/bufio/">bufio</a></dt>
729<dd>
730<p>
731The new <a href="/pkg/bufio/#Reader.Size"><code>Reader.Size</code></a>
732and <a href="/pkg/bufio/#Writer.Size"><code>Writer.Size</code></a>
733methods 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>
740The
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>,
744and
745<a href="/pkg/bytes/#SplitAfter"><code>SplitAfter</code></a>
Russ Cox4a2f28f2018-01-22 12:56:01 -0500746functions have always returned subslices of their inputs.
747Go 1.10 changes each returned subslice to have capacity equal to its length,
748so that appending to one cannot overwrite adjacent data in the original input.
Russ Cox04344262017-11-15 15:44:09 -0500749</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
756an initialization vector of incorrect length, like the other constructors in the
757package 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>
765The TLS server now advertises support for SHA-512 signatures when using TLS 1.2.
766The server already supported the signatures, but some clients would not select
767them 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>
Russ Cox21a460d2018-01-18 10:22:11 -0500774<a href="/pkg/crypto/x509/#Certificate.Verify"><code>Certificate.Verify</code></a>
775now enforces the name constraints for all
Russ Cox04344262017-11-15 15:44:09 -0500776names contained in the certificate, not just the one name that a client has asked about.
777Extended key usage restrictions are similarly now checked all at once.
778As a result, after a certificate has been validated, now it can be trusted in its entirety.
779It is no longer necessary to revalidate the certificate for each additional name
780or key usage.
Russ Cox04344262017-11-15 15:44:09 -0500781</p>
782
783<p>
784Parsed 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>,
Andrew Bonventre4c4ce3d2018-02-12 20:13:33 +0000788<code>PermittedURIDomains</code>, and <code>ExcludedURIDomains</code>. Certificates with
789invalid values for those fields are now rejected.
Russ Cox04344262017-11-15 15:44:09 -0500790</p>
791
792<p>
Russ Coxd6280902017-12-05 22:20:46 -0500793The new <a href="/pkg/crypto/x509/#MarshalPKCS1PublicKey"><code>MarshalPKCS1PublicKey</code></a>
794and <a href="/pkg/crypto/x509/#ParsePKCS1PublicKey"><code>ParsePKCS1PublicKey</code></a>
795functions convert an RSA public key to and from PKCS#1-encoded form.
796</p>
797
798<p>
Russ Cox04344262017-11-15 15:44:09 -0500799The new <a href="/pkg/crypto/x509/#MarshalPKCS8PrivateKey"><code>MarshalPKCS8PrivateKey</code></a>
Russ Coxd6280902017-12-05 22:20:46 -0500800function converts a private key to PKCS#8-encoded form.
801(<a href="/pkg/crypto/x509/#ParsePKCS8PrivateKey"><code>ParsePKCS8PrivateKey</code></a>
802has existed since Go 1.)
Russ Cox04344262017-11-15 15:44:09 -0500803</p>
804</dl>
805
806<dl id="crypto/x509/pkix"><dt><a href="/pkg/crypto/x509/pkix/">crypto/x509/pkix</a></dt>
807<dd>
808<p>
809<a href="/pkg/crypto/x509/pkix/#Name"><code>Name</code></a> now implements a
810<a href="/pkg/crypto/x509/pkix/#Name.String"><code>String</code></a> method that
811formats the X.509 distinguished name in the standard RFC 2253 format.
812</p>
813</dl>
814
815<dl id="database/sql/driver"><dt><a href="/pkg/database/sql/driver/">database/sql/driver</a></dt>
816<dd>
817<p>
Alberto Donizettif8610bb2018-01-29 11:59:53 +0100818Drivers that currently hold on to the destination buffer provided by
Daniel Theophanes651ddbd2018-01-25 10:50:02 -0800819<a href="/pkg/database/sql/driver/#Rows.Next"><code>driver.Rows.Next</code></a> should ensure they no longer
Kevin Burke00587e82018-01-25 11:26:54 -0800820write to a buffer assigned to the destination array outside of that call.
Daniel Theophanes651ddbd2018-01-25 10:50:02 -0800821Drivers must be careful that underlying buffers are not modified when closing
822<a href="/pkg/database/sql/driver/#Rows"><code>driver.Rows</code></a>.
823</p>
824<p>
Russ Cox04344262017-11-15 15:44:09 -0500825Drivers that want to construct a <a href="/pkg/database/sql/#DB"><code>sql.DB</code></a> for
826their clients can now implement the <a href="/pkg/database/sql/driver/#Connector"><code>Connector</code></a> interface
827and call the new <a href="/pkg/database/sql/#OpenDB"><code>sql.OpenDB</code></a> function,
828instead of needing to encode all configuration into a string
829passed to <a href="/pkg/database/sql/#Open"><code>sql.Open</code></a>.
830</p>
831<p>
Russ Coxd6280902017-12-05 22:20:46 -0500832Drivers that want to parse the configuration string only once per <code>sql.DB</code>
833instead of once per <a href="/pkg/database/sql/#Conn"><code>sql.Conn</code></a>,
834or that want access to each <code>sql.Conn</code>'s underlying context,
835can make their <a href="/pkg/database/sql/driver/#Driver"><code>Driver</code></a>
836implementations also implement <a href="/pkg/database/sql/driver/#DriverContext"><code>DriverContext</code></a>'s
837new <code>OpenConnector</code> method.
838</p>
839<p>
Russ Cox04344262017-11-15 15:44:09 -0500840Drivers that implement <a href="/pkg/database/sql/driver/#ExecerContext"><code>ExecerContext</code></a>
841no longer need to implement <a href="/pkg/database/sql/driver/#Execer"><code>Execer</code></a>;
842similarly, drivers that implement <a href="/pkg/database/sql/driver/#QueryerContext"><code>QueryerContext</code></a>
843no longer need to implement <a href="/pkg/database/sql/driver/#Queryer"><code>Queryer</code></a>.
844Previously, even if the context-based interfaces were implemented they were ignored
845unless the non-context-based interfaces were also implemented.
846</p>
847<p>
848To allow drivers to better isolate different clients using a cached driver connection in succession,
849if a <a href="/pkg/database/sql/driver/#Conn"><code>Conn</code></a> implements the new
850<a href="/pkg/database/sql/driver/#SessionResetter"><code>SessionResetter</code></a> interface,
851<code>database/sql</code> will now call <code>ResetSession</code> before
852reusing the <code>Conn</code> for a new client.
853</p>
854</dl>
855
856<dl id="debug/elf"><dt><a href="/pkg/debug/elf/">debug/elf</a></dt>
857<dd>
858<p>
859This release adds 348 new relocation constants divided between the relocation types
860<a href="/pkg/debug/elf/#R_386"><code>R_386</code></a>,
861<a href="/pkg/debug/elf/#R_AARCH64"><code>R_AARCH64</code></a>,
862<a href="/pkg/debug/elf/#R_ARM"><code>R_ARM</code></a>,
863<a href="/pkg/debug/elf/#R_PPC64"><code>R_PPC64</code></a>,
864and
865<a href="/pkg/debug/elf/#R_X86_64"><code>R_X86_64</code></a>.
866</p>
867</dl>
868
869<dl id="debug/macho"><dt><a href="/pkg/debug/macho/">debug/macho</a></dt>
870<dd>
871<p>
872Go 1.10 adds support for reading relocations from Mach-O sections,
873using the <a href="/pkg/debug/macho#Section"><code>Section</code></a> struct's new <code>Relocs</code> field
Russ Cox8114a852017-12-05 23:36:53 -0500874and the new <a href="/pkg/debug/macho/#Reloc"><code>Reloc</code></a>,
Russ Cox04344262017-11-15 15:44:09 -0500875<a href="/pkg/debug/macho/#RelocTypeARM"><code>RelocTypeARM</code></a>,
876<a href="/pkg/debug/macho/#RelocTypeARM64"><code>RelocTypeARM64</code></a>,
877<a href="/pkg/debug/macho/#RelocTypeGeneric"><code>RelocTypeGeneric</code></a>,
878and
879<a href="/pkg/debug/macho/#RelocTypeX86_64"><code>RelocTypeX86_64</code></a>
880types and associated constants.
881</p>
882<p>
883Go 1.10 also adds support for the <code>LC_RPATH</code> load command,
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500884represented by the types
885<a href="/pkg/debug/macho/#RpathCmd"><code>RpathCmd</code></a> and
Russ Cox04344262017-11-15 15:44:09 -0500886<a href="/pkg/debug/macho/#Rpath"><code>Rpath</code></a>,
887and new <a href="/pkg/debug/macho/#pkg-constants">named constants</a>
888for the various flag bits found in headers.
889</p>
890</dl>
891
892<dl id="encoding/asn1"><dt><a href="/pkg/encoding/asn1/">encoding/asn1</a></dt>
893<dd>
894<p>
895<a href="/pkg/encoding/asn1/#Marshal"><code>Marshal</code></a> now correctly encodes
896strings containing asterisks as type UTF8String instead of PrintableString,
897unless the string is in a struct field with a tag forcing the use of PrintableString.
898<code>Marshal</code> also now respects struct tags containing <code>application</code> directives.
899</p>
900<p>
Russ Coxd6280902017-12-05 22:20:46 -0500901The new <a href="/pkg/encoding/asn1/#MarshalWithParams"><code>MarshalWithParams</code></a>
902function marshals its argument as if the additional params were its associated
903struct field tag.
904</p>
905<p>
Russ Cox04344262017-11-15 15:44:09 -0500906<a href="/pkg/encoding/asn1/#Unmarshal"><code>Unmarshal</code></a> now respects
907struct field tags using the <code>explicit</code> and <code>tag</code>
908directives.
909</p>
Russ Coxd6280902017-12-05 22:20:46 -0500910<p>
911Both <code>Marshal</code> and <code>Unmarshal</code> now support a new struct field tag
912<code>numeric</code>, indicating an ASN.1 NumericString.
913</p>
Russ Cox04344262017-11-15 15:44:09 -0500914</dl>
915
916<dl id="encoding/csv"><dt><a href="/pkg/encoding/csv/">encoding/csv</a></dt>
917<dd>
918<p>
919<a href="/pkg/encoding/csv/#Reader"><code>Reader</code></a> now disallows the use of
920nonsensical <code>Comma</code> and <code>Comment</code> settings,
921such as NUL, carriage return, newline, invalid runes, and the Unicode replacement character,
922or setting <code>Comma</code> and <code>Comment</code> equal to each other.
923</p>
924<p>
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500925In the case of a syntax error in a CSV record that spans multiple input lines, <code>Reader</code>
Russ Cox04344262017-11-15 15:44:09 -0500926now 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.
927</p>
Russ Cox04344262017-11-15 15:44:09 -0500928</dl>
929
930<dl id="encoding/hex"><dt><a href="/pkg/encoding/hex/">encoding/hex</a></dt>
931<dd>
932<p>
933The new functions
934<a href="/pkg/encoding/hex/#NewEncoder"><code>NewEncoder</code></a>
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500935and
Russ Cox04344262017-11-15 15:44:09 -0500936<a href="/pkg/encoding/hex/#NewDecoder"><code>NewDecoder</code></a>
937provide streaming conversions to and from hexadecimal,
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500938analogous to equivalent functions already in
Russ Cox04344262017-11-15 15:44:09 -0500939<a href="/pkg/encoding/base32/">encoding/base32</a>
940and
941<a href="/pkg/encoding/base64/">encoding/base64</a>.
942</p>
943
944<p>
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500945When the functions
Russ Cox04344262017-11-15 15:44:09 -0500946<a href="/pkg/encoding/hex/#Decode"><code>Decode</code></a>
947and
948<a href="/pkg/encoding/hex/#DecodeString"><code>DecodeString</code></a>
949encounter malformed input,
Russ Cox8114a852017-12-05 23:36:53 -0500950they now return the number of bytes already converted
Russ Cox04344262017-11-15 15:44:09 -0500951along with the error.
952Previously they always returned a count of 0 with any error.
953</p>
954</dl>
955
956<dl id="encoding/json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
957<dd>
958<p>
959The <a href="/pkg/encoding/json/#Decoder"><code>Decoder</code></a>
960adds a new method
Russ Cox8114a852017-12-05 23:36:53 -0500961<a href="/pkg/encoding/json/#Decoder.DisallowUnknownFields"><code>DisallowUnknownFields</code></a>
Russ Cox04344262017-11-15 15:44:09 -0500962that causes it to report inputs with unknown JSON fields as a decoding error.
963(The default behavior has always been to discard unknown fields.)
964</p>
Russ Coxc56fda62017-12-06 00:01:26 -0500965
966<p>
967As a result of <a href="#reflect">fixing a reflect bug</a>,
968<a href="/pkg/encoding/json/#Unmarshal"><code>Unmarshal</code></a>
969can no longer decode into fields inside
970embedded pointers to unexported struct types,
971because it cannot initialize the unexported embedded pointer
972to point at fresh storage.
973<code>Unmarshal</code> now returns an error in this case.
974</p>
Russ Cox04344262017-11-15 15:44:09 -0500975</dl>
976
Russ Coxd6280902017-12-05 22:20:46 -0500977<dl id="encoding/pem"><dt><a href="/pkg/encoding/pem/">encoding/pem</a></dt>
978<dd>
979<p>
980<a href="/pkg/encoding/pem/#Encode"><code>Encode</code></a>
981and
982<a href="/pkg/encoding/pem/#EncodeToMemory"><code>EncodeToMemory</code></a>
983no longer generate partial output when presented with a
984block that is impossible to encode as PEM data.
985</p>
986</dl>
987
Russ Cox04344262017-11-15 15:44:09 -0500988<dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
989<dd>
990<p>
991The new function
992<a href="/pkg/encoding/xml/#NewTokenDecoder"><code>NewTokenDecoder</code></a>
Andrew Bonventre05deefe2017-12-11 16:42:25 -0500993is like
Russ Cox04344262017-11-15 15:44:09 -0500994<a href="/pkg/encoding/xml/#NewDecoder"><code>NewDecoder</code></a>
995but creates a decoder reading from a <a href="/pkg/encoding/xml/#TokenReader"><code>TokenReader</code></a>
996instead of an XML-formatted byte stream.
997This is meant to enable the construction of XML stream transformers in client libraries.
998</p>
999</dl>
1000
1001<dl id="flag"><dt><a href="/pkg/flag/">flag</a></dt>
1002<dd>
1003<p>
1004The default
1005<a href="/pkg/flag/#Usage"><code>Usage</code></a> function now prints
Andrew Bonventre05deefe2017-12-11 16:42:25 -05001006its first line of output to
Russ Cox04344262017-11-15 15:44:09 -05001007<code>CommandLine.Output()</code>
1008instead of assuming <code>os.Stderr</code>,
1009so that the usage message is properly redirected for
1010clients using <code>CommandLine.SetOutput</code>.
1011</p>
1012<p>
1013<a href="/pkg/flag/#PrintDefaults"><code>PrintDefaults</code></a> now
1014adds appropriate indentation after newlines in flag usage strings,
1015so that multi-line usage strings display nicely.
1016</p>
1017<p>
1018<a href="/pkg/flag/#FlagSet"><code>FlagSet</code></a> adds new methods
1019<a href="/pkg/flag/#FlagSet.ErrorHandling"><code>ErrorHandling</code></a>,
1020<a href="/pkg/flag/#FlagSet.Name"><code>Name</code></a>,
1021and
1022<a href="/pkg/flag/#FlagSet.Output"><code>Output</code></a>,
1023to retrieve the settings passed to
1024<a href="/pkg/flag/#NewFlagSet"><code>NewFlagSet</code></a>
1025and
1026<a href="/pkg/flag/#FlagSet.SetOutput"><code>FlagSet.SetOutput</code></a>.
1027</p>
1028</dl>
1029
1030<dl id="go/doc"><dt><a href="/pkg/go/doc/">go/doc</a></dt>
1031<dd>
1032<p>
1033To support the <a href="#doc">doc change</a> described above,
1034functions returning slices of <code>T</code>, <code>*T</code>, <code>**T</code>, and so on
1035are now reported in <code>T</code>'s <a href="/pkg/go/doc/#Type"><code>Type</code></a>'s <code>Funcs</code> list,
1036instead of in the <a href="/pkg/go/doc/#Package"><code>Package</code></a>'s <code>Funcs</code> list.
1037</p>
1038</dl>
1039
1040<dl id="go/importer"><dt><a href="/pkg/go/importer/">go/importer</a></dt>
1041<dd>
1042<p>
1043The <a href="/pkg/go/importer/#For"><code>For</code></a> function now accepts a non-nil lookup argument.
1044</p>
1045</dl>
1046
1047<dl id="go/printer"><dt><a href="/pkg/go/printer/">go/printer</a></dt>
1048<dd>
1049<p>
1050The changes to the default formatting of Go source code
1051discussed in the <a href="#gofmt">gofmt section</a> above
1052are implemented in the <a href="/pkg/go/printer/">go/printer</a> package
1053and also affect the output of the higher-level <a href="/pkg/go/format/">go/format</a> package.
1054</p>
1055</dl>
1056
1057<dl id="hash"><dt><a href="/pkg/hash/">hash</a></dt>
1058<dd>
1059<p>
1060Implementations of the <a href="/pkg/hash/#Hash"><code>Hash</code></a> interface are now
1061encouraged to implement <a href="/pkg/encoding/#BinaryMarshaler"><code>encoding.BinaryMarshaler</code></a>
1062and <a href="/pkg/encoding/#BinaryUnmarshaler"><code>encoding.BinaryUnmarshaler</code></a>
1063to allow saving and recreating their internal state,
1064and all implementations in the standard library
1065(<a href="/pkg/hash/crc32/">hash/crc32</a>, <a href="/pkg/crypto/sha256/">crypto/sha256</a>, and so on)
1066now implement those interfaces.
1067</p>
1068</dl>
1069
1070<dl id="html/template"><dt><a href="/pkg/html/template/">html/template</a></dt>
1071<dd>
1072<p>
Andrew Bonventre594668a2018-01-11 11:30:49 -05001073The new <a href="/pkg/html/template#Srcset"><code>Srcset</code></a> content
1074type allows for proper handling of values within the
1075<a href="https://w3c.github.io/html/semantics-embedded-content.html#element-attrdef-img-srcset"><code>srcset</code></a>
1076attribute of <code>img</code> tags.
1077</p>
Russ Cox04344262017-11-15 15:44:09 -05001078</dl>
1079
1080<dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt>
1081<dd>
1082<p>
1083<a href="/pkg/math/big/#Int"><code>Int</code></a> now supports conversions to and from bases 2 through 62
1084in its <a href="/pkg/math/big/#Int.SetString"><code>SetString</code></a> and <a href="/pkg/math/big/#Text"><code>Text</code></a> methods.
1085(Previously it only allowed bases 2 through 36.)
1086The value of the constant <code>MaxBase</code> has been updated.
1087</p>
1088<p>
Andrew Bonventre05deefe2017-12-11 16:42:25 -05001089<a href="/pkg/math/big/#Int"><code>Int</code></a> adds a new
Russ Cox04344262017-11-15 15:44:09 -05001090<a href="/pkg/math/big/#CmpAbs"><code>CmpAbs</code></a> method
Andrew Bonventre05deefe2017-12-11 16:42:25 -05001091that is like <a href="/pkg/math/big/#Cmp"><code>Cmp</code></a> but
Russ Cox04344262017-11-15 15:44:09 -05001092compares only the absolute values (not the signs) of its arguments.
1093</p>
1094<p>
1095<a href="/pkg/math/big/#Float"><code>Float</code></a> adds a new
1096<a href="/pkg/math/big/#Float.Sqrt"><code>Sqrt</code></a> method to
1097compute square roots.
1098</p>
1099</dl>
1100
Russ Coxd6280902017-12-05 22:20:46 -05001101<dl id="math/cmplx"><dt><a href="/pkg/math/cmplx/">math/cmplx</a></dt>
1102<dd>
1103<p>
1104Branch cuts and other boundary cases in
Brad Fitzpatrick4f1fca92017-12-07 23:27:11 +00001105<a href="/pkg/math/cmplx/#Asin"><code>Asin</code></a>,
1106<a href="/pkg/math/cmplx/#Asinh"><code>Asinh</code></a>,
1107<a href="/pkg/math/cmplx/#Atan"><code>Atan</code></a>,
Russ Coxd6280902017-12-05 22:20:46 -05001108and
Brad Fitzpatrick4f1fca92017-12-07 23:27:11 +00001109<a href="/pkg/math/cmplx/#Sqrt"><code>Sqrt</code></a>
Russ Coxd6280902017-12-05 22:20:46 -05001110have been corrected to match the definitions used in the C99 standard.
1111</p>
1112</dl>
1113
Russ Cox04344262017-11-15 15:44:09 -05001114<dl id="math/rand"><dt><a href="/pkg/math/rand/">math/rand</a></dt>
1115<dd>
1116<p>
Russ Cox8114a852017-12-05 23:36:53 -05001117The new <a href="/pkg/math/rand/#Shuffle"><code>Shuffle</code></a> function and corresponding
Russ Cox04344262017-11-15 15:44:09 -05001118<a href="/pkg/math/rand/#Rand.Shuffle"><code>Rand.Shuffle</code></a> method
1119shuffle an input sequence.
1120</p>
Russ Cox04344262017-11-15 15:44:09 -05001121</dl>
1122
1123<dl id="math"><dt><a href="/pkg/math/">math</a></dt>
1124<dd>
1125<p>
1126The new functions
1127<a href="/pkg/math/#Round"><code>Round</code></a>
1128and
1129<a href="/pkg/math/#RoundToEven"><code>RoundToEven</code></a>
Russ Cox8114a852017-12-05 23:36:53 -05001130round their arguments to the nearest floating-point integer;
Russ Cox04344262017-11-15 15:44:09 -05001131<code>Round</code> rounds a half-integer to its larger integer neighbor (away from zero)
Russ Cox8114a852017-12-05 23:36:53 -05001132while <code>RoundToEven</code> rounds a half-integer to its even integer neighbor.
Russ Cox04344262017-11-15 15:44:09 -05001133</p>
1134
1135<p>
1136The new functions
1137<a href="/pkg/math/#Erfinv"><code>Erfinv</code></a>
1138and
1139<a href="/pkg/math/#Erfcinv"><code>Erfcinv</code></a>
1140compute the inverse error function and the
1141inverse complementary error function.
1142</p>
1143</dl>
1144
1145<dl id="mime/multipart"><dt><a href="/pkg/mime/multipart/">mime/multipart</a></dt>
1146<dd>
1147<p>
1148<a href="/pkg/mime/multipart/#Reader"><code>Reader</code></a>
1149now accepts parts with empty filename attributes.
1150</p>
1151</dl>
1152
1153<dl id="mime"><dt><a href="/pkg/mime/">mime</a></dt>
1154<dd>
1155<p>
1156<a href="/pkg/mime/#ParseMediaType"><code>ParseMediaType</code></a> now discards
1157invalid attribute values; previously it returned those values as empty strings.
1158</p>
1159</dl>
1160
1161<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
1162<dd>
1163<p>
1164The <a href="/pkg/net/#Conn"><code>Conn</code></a> and
1165<a href="/pkg/net/#Conn"><code>Listener</code></a> implementations
1166in this package now guarantee that when <code>Close</code> returns,
1167the underlying file descriptor has been closed.
1168(In earlier releases, if the <code>Close</code> stopped pending I/O
1169in other goroutines, the closing of the file descriptor could happen in one of those
1170goroutines shortly after <code>Close</code> returned.)
1171</p>
1172
1173<p>
1174<a href="/pkg/net/#TCPListener"><code>TCPListener</code></a> and
1175<a href="/pkg/net/#UnixListener"><code>UnixListener</code></a>
Andrew Bonventre05deefe2017-12-11 16:42:25 -05001176now implement
Russ Cox04344262017-11-15 15:44:09 -05001177<a href="/pkg/syscall/#Conn"><code>syscall.Conn</code></a>,
1178to allow setting options on the underlying file descriptor
1179using <a href="/pkg/syscall/#RawConn"><code>syscall.RawConn.Control</code></a>.
1180</p>
1181
1182<p>
1183The <code>Conn</code> implementations returned by <a href="/pkg/net/#Pipe"><code>Pipe</code></a>
1184now support setting read and write deadlines.
1185</p>
1186
1187<p>
1188The <a href="/pkg/net/#IPConn.ReadMsgIP"><code>IPConn.ReadMsgIP</code></a>,
1189<a href="/pkg/net/#IPConn.WriteMsgIP"><code>IPConn.WriteMsgIP</code></a>,
1190<a href="/pkg/net/#UDPConn.ReadMsgUDP"><code>UDPConn.ReadMsgUDP</code></a>,
1191and
1192<a href="/pkg/net/#UDPConn.WriteMsgUDP"><code>UDPConn.WriteMsgUDP</code></a>,
1193methods are now implemented on Windows.
1194</p>
1195</dl>
1196
1197<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
1198<dd>
1199<p>
1200On the client side, an HTTP proxy (most commonly configured by
1201<a href="/pkg/net/http/#ProxyFromEnvironment"><code>ProxyFromEnvironment</code></a>)
1202can now be specified as an <code>https://</code> URL,
1203meaning that the client connects to the proxy over HTTPS before issuing a standard, proxied HTTP request.
1204(Previously, HTTP proxy URLs were required to begin with <code>http://</code> or <code>socks5://</code>.)
1205</p>
1206<p>
1207On 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>
1208now apply <code>If-Range</code> checks to <code>HEAD</code> requests.
1209<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>.
Russ Coxd6280902017-12-05 22:20:46 -05001210The content-serving handlers also now omit the <code>Content-Type</code> header when serving zero-length content.
1211</p>
1212<p>
1213<a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>'s <code>WriteHeader</code> method now panics
1214if passed an invalid (non-3-digit) status code.
1215</p>
1216<p>
1217<a href="/pkg/net/http/#Redirect"><code>Redirect</code></a> now sets the <code>Content-Type</code> header before writing its HTTP response.
1218</p>
1219</dl>
1220
Russ Cox04344262017-11-15 15:44:09 -05001221<dl id="net/mail"><dt><a href="/pkg/net/mail/">net/mail</a></dt>
1222<dd>
1223<p>
1224<a href="/pkg/net/mail/#ParseAddress"><code>ParseAddress</code></a> and
Russ Cox8114a852017-12-05 23:36:53 -05001225<a href="/pkg/net/mail/#ParseAddressList"><code>ParseAddressList</code></a>
Russ Cox04344262017-11-15 15:44:09 -05001226now support a variety of obsolete address formats.
1227</p>
1228</dl>
1229
1230<dl id="net/smtp"><dt><a href="/pkg/net/smtp/">net/smtp</a></dt>
1231<dd>
1232<p>
1233The <a href="/pkg/net/smtp/#Client"><code>Client</code></a> adds a new
1234<a href="/pkg/net/smtp/#Client.Noop"><code>Noop</code></a> method,
1235to test whether the server is still responding.
1236It also now defends against possible SMTP injection in the inputs
1237to the <a href="/pkg/net/smtp/#Client.Hello"><code>Hello</code></a>
1238and <a href="/pkg/net/smtp/#Client.Verify"><code>Verify</code></a> methods.
1239</p>
1240</dl>
1241
1242<dl id="net/textproto"><dt><a href="/pkg/net/textproto/">net/textproto</a></dt>
1243<dd>
1244<p>
1245<a href="/pkg/net/textproto/#ReadMIMEHeader"><code>ReadMIMEHeader</code></a>
Russ Coxd6280902017-12-05 22:20:46 -05001246now rejects any header that begins with a continuation (indented) header line.
1247Previously a header with an indented first line was treated as if the first line
1248were not indented.
Russ Cox04344262017-11-15 15:44:09 -05001249</p>
1250</dl>
1251
1252<dl id="net/url"><dt><a href="/pkg/net/url/">net/url</a></dt>
1253<dd>
1254<p>
1255<a href="/pkg/net/url/#ResolveReference"><code>ResolveReference</code></a>
kim yongbindbdeeed2018-01-11 01:49:45 +09001256now preserves multiple leading slashes in the target URL.
Russ Cox04344262017-11-15 15:44:09 -05001257Previously it rewrote multiple leading slashes to a single slash,
1258which resulted in the <a href="/pkg/net/http/#Client"><code>http.Client</code></a>
1259following certain redirects incorrectly.
1260</p>
1261<p>
1262For example, this code's output has changed:
1263</p>
1264<pre>
1265base, _ := url.Parse("http://host//path//to/page1")
1266target, _ := url.Parse("page2")
1267fmt.Println(base.ResolveReference(target))
1268</pre>
1269<p>
1270Note the doubled slashes around <code>path</code>.
1271In Go 1.9 and earlier, the resolved URL was <code>http://host/path//to/page2</code>:
1272the doubled slash before <code>path</code> was incorrectly rewritten
1273to a single slash, while the doubled slash after <code>path</code> was
1274correctly preserved.
1275Go 1.10 preserves both doubled slashes, resolving to <code>http://host//path//to/page2</code>
1276as required by <a href="https://tools.ietf.org/html/rfc3986#section-5.2">RFC 3986</a>.
1277</p>
1278
1279<p>This change may break existing buggy programs that unintentionally
1280construct a base URL with a leading doubled slash in the path and inadvertently
1281depend on <code>ResolveReference</code> to correct that mistake.
1282For example, this can happen if code adds a host prefix
1283like <code>http://host/</code> to a path like <code>/my/api</code>,
1284resulting in a URL with a doubled slash: <code>http://host//my/api</code>.
1285</p>
Russ Coxd6280902017-12-05 22:20:46 -05001286
1287<p>
1288<a href="/pkg/net/url/#UserInfo"><code>UserInfo</code></a>'s methods
1289now treat a nil receiver as equivalent to a pointer to a zero <code>UserInfo</code>.
1290Previously, they panicked.
1291</p>
Russ Cox04344262017-11-15 15:44:09 -05001292</dl>
1293
1294<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
1295<dd>
1296<p>
1297<a href="/pkg/os/#File"><code>File</code></a> adds new methods
1298<a href="/pkg/os/#File.SetDeadline"><code>SetDeadline</code></a>,
1299<a href="/pkg/os/#File.SetReadDeadline"><code>SetReadDeadline</code></a>,
1300and
1301<a href="/pkg/os/#File.SetWriteDeadline"><code>SetWriteDeadline</code></a>
1302that allow setting I/O deadlines when the
1303underlying file descriptor supports non-blocking I/O operations.
1304The definition of these methods matches those in <a href="/pkg/net/#Conn"><code>net.Conn</code></a>.
Ian Lance Taylor15bc0a12018-01-02 16:37:48 -08001305If an I/O method fails due to missing a deadline, it will return a
1306timeout error; the
1307new <a href="/pkg/os/#IsTimeout"><code>IsTimeout</code></a> function
1308reports whether an error represents a timeout.
Russ Cox04344262017-11-15 15:44:09 -05001309</p>
1310
1311<p>
1312Also matching <code>net.Conn</code>,
Andrew Bonventre05deefe2017-12-11 16:42:25 -05001313<code>File</code>'s
Russ Cox04344262017-11-15 15:44:09 -05001314<a href="/pkg/os/#File.Close"><code>Close</code></a> method
1315now guarantee that when <code>Close</code> returns,
1316the underlying file descriptor has been closed.
Russ Cox4a2f28f2018-01-22 12:56:01 -05001317(In earlier releases,
Russ Cox04344262017-11-15 15:44:09 -05001318if the <code>Close</code> stopped pending I/O
1319in other goroutines, the closing of the file descriptor could happen in one of those
1320goroutines shortly after <code>Close</code> returned.)
1321</p>
1322
1323<p>
Andrew Bonventre05deefe2017-12-11 16:42:25 -05001324On BSD, macOS, and Solaris systems,
Russ Cox04344262017-11-15 15:44:09 -05001325<a href="/pkg/os/#Chtimes"><code>Chtimes</code></a>
1326now supports setting file times with nanosecond precision
1327(assuming the underlying file system can represent them).
1328</p>
1329</dl>
1330
1331<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
1332<dd>
1333<p>
1334The <a href="/pkg/reflect/#Copy"><code>Copy</code></a> function now allows copying
1335from a string into a byte array or byte slice, to match the
1336<a href="/pkg/builtin/#copy">built-in copy function</a>.
1337</p>
Russ Cox8114a852017-12-05 23:36:53 -05001338
1339<p>
Russ Coxc56fda62017-12-06 00:01:26 -05001340In structs, embedded pointers to unexported struct types were
1341previously incorrectly reported with an empty <code>PkgPath</code>
1342in the corresponding <a href="/pkg/reflect/#StructField">StructField</a>,
1343with the result that for those fields,
1344and <a href="/pkg/reflect/#Value.CanSet"><code>Value.CanSet</code></a>
1345incorrectly returned true and
Alberto Donizettif8610bb2018-01-29 11:59:53 +01001346<a href="/pkg/reflect/#Value.Set"><code>Value.Set</code></a>
Russ Coxc56fda62017-12-06 00:01:26 -05001347incorrectly succeeded.
1348The underlying metadata has been corrected;
1349for those fields,
1350<code>CanSet</code> now correctly returns false
1351and <code>Set</code> now correctly panics.
1352This may affect reflection-based unmarshalers
1353that could previously unmarshal into such fields
1354but no longer can.
1355For example, see the <a href="#encoding/json"><code>encoding/json</code> notes</a>.
1356</p>
Russ Cox04344262017-11-15 15:44:09 -05001357</dl>
1358
1359<dl id="runtime/pprof"><dt><a href="/pkg/runtime/pprof/">runtime/pprof</a></dt>
1360<dd>
1361<p>
1362As <a href="#pprof">noted above</a>, the blocking and mutex profiles
1363now include symbol information so that they can be viewed without needing
1364the binary that generated them.
1365</p>
1366</dl>
1367
1368<dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
1369<dd>
1370<p>
Andrew Bonventre05deefe2017-12-11 16:42:25 -05001371<a href="/pkg/strconv/#ParseUint"><code>ParseUint</code></a> now returns
Russ Cox04344262017-11-15 15:44:09 -05001372the maximum magnitude integer of the appropriate size
1373with any <code>ErrRange</code> error, as it was already documented to do.
1374Previously it returned 0 with <code>ErrRange</code> errors.
1375</p>
1376</dl>
1377
1378<dl id="strings"><dt><a href="/pkg/strings/">strings</a></dt>
1379<dd>
1380<p>
1381A new type
1382<a href="/pkg/strings/#Builder"><code>Builder</code></a> is a replacement for
1383<a href="/pkg/bytes/#Buffer"><code>bytes.Buffer</code></a> for the use case of
1384accumulating text into a <code>string</code> result.
1385The <code>Builder</code>'s API is a restricted subset of <code>bytes.Buffer</code>'s
1386that allows it to safely avoid making a duplicate copy of the data
1387during the <a href="/pkg/strings/#Builder.String"><code>String</code></a> method.
1388</p>
1389</dl>
1390
1391<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
1392<dd>
1393<p>
1394On Windows,
1395the new <a href="/pkg/syscall/#SysProcAttr"><code>SysProcAttr</code></a> field <code>Token</code>,
1396of type <a href="/pkg/syscall/#Token"><code>Token</code></a> allows the creation of a process that
1397runs as another user during <a href="/pkg/syscall/#StartProcess"><code>StartProcess</code></a>
1398(and therefore also during <a href="/pkg/os/#StartProcess"><code>os.StartProcess</code></a> and
1399<a href="/pkg/os/exec/#Cmd.Start"><code>exec.Cmd.Start</code></a>).
1400The new function <a href="/pkg/syscall/#CreateProcessAsUser"><code>CreateProcessAsUser</code></a>
1401gives access to the underlying system call.
1402</p>
1403
1404<p>
1405On BSD, macOS, and Solaris systems, <a href="/pkg/syscall/#UtimesNano"><code>UtimesNano</code></a>
1406is now implemented.
1407</p>
1408</dl>
1409
Russ Cox04344262017-11-15 15:44:09 -05001410<dl id="time"><dt><a href="/pkg/time/">time</a></dt>
1411<dd>
1412<p>
1413<a href="/pkg/time/#LoadLocation"><code>LoadLocation</code></a> now uses the directory
1414or uncompressed zip file named by the <code>$ZONEINFO</code>
1415environment variable before looking in the default system-specific list of
1416known installation locations or in <code>$GOROOT/lib/time/zoneinfo.zip</code>.
1417</p>
1418<p>
Russ Coxd6280902017-12-05 22:20:46 -05001419The new function <a href="/pkg/time/#LoadLocationFromTZData"><code>LoadLocationFromTZData</code></a>
1420allows conversion of IANA time zone file data to a <a href="/pkg/time/#Location"><code>Location</code></a>.
Russ Cox04344262017-11-15 15:44:09 -05001421</p>
1422</dl>
1423
1424<dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
1425<dd>
1426<p>
1427The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated
Russ Cox4a2f28f2018-01-22 12:56:01 -05001428support throughout the system has been upgraded from Unicode 9.0 to
Russ Cox04344262017-11-15 15:44:09 -05001429<a href="http://www.unicode.org/versions/Unicode10.0.0/">Unicode 10.0</a>,
1430which adds 8,518 new characters, including four new scripts, one new property,
1431a Bitcoin currency symbol, and 56 new emoji.
1432</p>
1433</dl>