github.com/stingnevermore/go@v0.0.0-20180120041312-3810f5bfed72/doc/go1.9.html (about) 1 <!--{ 2 "Title": "Go 1.9 Release Notes", 3 "Path": "/doc/go1.9", 4 "Template": true 5 }--> 6 7 <!-- 8 NOTE: In this document and others in this directory, the convention is to 9 set fixed-width phrases with non-fixed-width spaces, as in 10 <code>hello</code> <code>world</code>. 11 Do not send CLs removing the interior tags from such phrases. 12 --> 13 14 <style> 15 ul li { margin: 0.5em 0; } 16 </style> 17 18 <h2 id="introduction">Introduction to Go 1.9</h2> 19 20 <p> 21 The latest Go release, version 1.9, arrives six months 22 after <a href="go1.8">Go 1.8</a> and is the tenth release in 23 the <a href="https://golang.org/doc/devel/release.html">Go 1.x 24 series</a>. 25 There are two <a href="#language">changes to the language</a>: 26 adding support for type aliases and defining when implementations 27 may fuse floating point operations. 28 Most of the changes are in the implementation of the toolchain, 29 runtime, and libraries. 30 As always, the release maintains the Go 1 31 <a href="/doc/go1compat.html">promise of compatibility</a>. 32 We expect almost all Go programs to continue to compile and run as 33 before. 34 </p> 35 36 <p> 37 The release 38 adds <a href="#monotonic-time">transparent monotonic time support</a>, 39 <a href="#parallel-compile">parallelizes compilation of functions</a> within a package, 40 better supports <a href="#test-helper">test helper functions</a>, 41 includes a new <a href="#math-bits">bit manipulation package</a>, 42 and has a new <a href="#sync-map">concurrent map type</a>. 43 </p> 44 45 <h2 id="language">Changes to the language</h2> 46 47 <p> 48 There are two changes to the language. 49 </p> 50 <p> 51 Go now supports type aliases to support gradual code repair while 52 moving a type between packages. 53 The <a href="https://golang.org/design/18130-type-alias">type alias 54 design document</a> 55 and <a href="https://talks.golang.org/2016/refactor.article">an 56 article on refactoring</a> cover the problem in detail. 57 In short, a type alias declaration has the form: 58 </p> 59 60 <pre> 61 type T1 = T2 62 </pre> 63 64 <p> 65 This declaration introduces an alias name <code>T1</code>—an 66 alternate spelling—for the type denoted by <code>T2</code>; that is, 67 both <code>T1</code> and <code>T2</code> denote the same type. 68 </p> 69 70 <p> <!-- CL 40391 --> 71 A smaller language change is that the 72 <a href="/ref/spec#Floating_point_operators">language specification 73 now states</a> when implementations are allowed to fuse floating 74 point operations together, such as by using an architecture's "fused 75 multiply and add" (FMA) instruction to compute <code>x*y</code> <code>+</code> <code>z</code> 76 without rounding the intermediate result <code>x*y</code>. 77 To force the intermediate rounding, write <code>float64(x*y)</code> <code>+</code> <code>z</code>. 78 </p> 79 80 <h2 id="ports">Ports</h2> 81 82 <p> 83 There are no new supported operating systems or processor 84 architectures in this release. 85 </p> 86 87 <h3 id="power8">ppc64x requires POWER8</h3> 88 89 <p> <!-- CL 36725, CL 36832 --> 90 Both <code>GOARCH=ppc64</code> and <code>GOARCH=ppc64le</code> now 91 require at least POWER8 support. In previous releases, 92 only <code>GOARCH=ppc64le</code> required POWER8 and the big 93 endian <code>ppc64</code> architecture supported older 94 hardware. 95 <p> 96 97 <h3 id="freebsd">FreeBSD</h3> 98 99 <p> 100 Go 1.9 is the last release that will run on FreeBSD 9.3, 101 which is already 102 <a href="https://www.freebsd.org/security/unsupported.html">unsupported by FreeBSD</a>. 103 Go 1.10 will require FreeBSD 10.3+. 104 </p> 105 106 <h3 id="openbsd">OpenBSD 6.0</h3> 107 108 <p> <!-- CL 40331 --> 109 Go 1.9 now enables PT_TLS generation for cgo binaries and thus 110 requires OpenBSD 6.0 or newer. Go 1.9 no longer supports 111 OpenBSD 5.9. 112 <p> 113 114 <h3 id="known_issues">Known Issues</h3> 115 116 <p> 117 There are some instabilities on FreeBSD that are known but not understood. 118 These can lead to program crashes in rare cases. 119 See <a href="https://golang.org/issue/15658">issue 15658</a>. 120 Any help in solving this FreeBSD-specific issue would be appreciated. 121 </p> 122 123 <p> 124 Go stopped running NetBSD builders during the Go 1.9 development 125 cycle due to NetBSD kernel crashes, up to and including NetBSD 7.1. 126 As Go 1.9 is being released, NetBSD 7.1.1 is being released with a fix. 127 However, at this time we have no NetBSD builders passing our test suite. 128 Any help investigating the 129 <a href="https://github.com/golang/go/labels/OS-NetBSD">various NetBSD issues</a> 130 would be appreciated. 131 </p> 132 133 <h2 id="tools">Tools</h2> 134 135 <h3 id="parallel-compile">Parallel Compilation</h3> 136 137 <p> 138 The Go compiler now supports compiling a package's functions in parallel, taking 139 advantage of multiple cores. This is in addition to the <code>go</code> command's 140 existing support for parallel compilation of separate packages. 141 Parallel compilation is on by default, but it can be disabled by setting the 142 environment variable <code>GO19CONCURRENTCOMPILATION</code> to <code>0</code>. 143 </p> 144 145 <h3 id="vendor-dotdotdot">Vendor matching with ./...</h3> 146 147 <p><!-- CL 38745 --> 148 By popular request, <code>./...</code> no longer matches packages 149 in <code>vendor</code> directories in tools accepting package names, 150 such as <code>go</code> <code>test</code>. To match vendor 151 directories, write <code>./vendor/...</code>. 152 </p> 153 154 <h3 id="goroot">Moved GOROOT</h3> 155 156 <p><!-- CL 42533 --> 157 The <a href="/cmd/go/">go tool</a> will now use the path from which it 158 was invoked to attempt to locate the root of the Go install tree. 159 This means that if the entire Go installation is moved to a new 160 location, the go tool should continue to work as usual. 161 This may be overridden by setting <code>GOROOT</code> in the environment, 162 which should only be done in unusual circumstances. 163 Note that this does not affect the result of 164 the <a href="/pkg/runtime/#GOROOT">runtime.GOROOT</a> function, which 165 will continue to report the original installation location; 166 this may be fixed in later releases. 167 </p> 168 169 <h3 id="compiler">Compiler Toolchain</h3> 170 171 <p><!-- CL 37441 --> 172 Complex division is now C99-compatible. This has always been the 173 case in gccgo and is now fixed in the gc toolchain. 174 </p> 175 176 <p> <!-- CL 36983 --> 177 The linker will now generate DWARF information for cgo executables on Windows. 178 </p> 179 180 <p> <!-- CL 44210, CL 40095 --> 181 The compiler now includes lexical scopes in the generated DWARF if the 182 <code>-N -l</code> flags are provided, allowing 183 debuggers to hide variables that are not in scope. The <code>.debug_info</code> 184 section is now DWARF version 4. 185 </p> 186 187 <p> <!-- CL 43855 --> 188 The values of <code>GOARM</code> and <code>GO386</code> now affect a 189 compiled package's build ID, as used by the <code>go</code> tool's 190 dependency caching. 191 </p> 192 193 <h3 id="asm">Assembler</h3> 194 195 <p> <!-- CL 42028 --> 196 The four-operand ARM <code>MULA</code> instruction is now assembled correctly, 197 with the addend register as the third argument and the result 198 register as the fourth and final argument. 199 In previous releases, the two meanings were reversed. 200 The three-operand form, in which the fourth argument is implicitly 201 the same as the third, is unaffected. 202 Code using four-operand <code>MULA</code> instructions 203 will need to be updated, but we believe this form is very rarely used. 204 <code>MULAWT</code> and <code>MULAWB</code> were already 205 using the correct order in all forms and are unchanged. 206 </p> 207 208 <p> <!-- CL 42990 --> 209 The assembler now supports <code>ADDSUBPS/PD</code>, completing the 210 two missing x86 SSE3 instructions. 211 </p> 212 213 <h3 id="go-doc">Doc</h3> 214 215 <p><!-- CL 36031 --> 216 Long lists of arguments are now truncated. This improves the readability 217 of <code>go</code> <code>doc</code> on some generated code. 218 </p> 219 220 <p><!-- CL 38438 --> 221 Viewing documentation on struct fields is now supported. 222 For example, <code>go</code> <code>doc</code> <code>http.Client.Jar</code>. 223 </p> 224 225 <h3 id="go-env-json">Env</h3> 226 227 <p> <!-- CL 38757 --> 228 The new <code>go</code> <code>env</code> <code>-json</code> flag 229 enables JSON output, instead of the default OS-specific output 230 format. 231 </p> 232 233 <h3 id="go-test-list">Test</h3> 234 235 <p> <!-- CL 41195 --> 236 The <a href="/cmd/go/#hdr-Description_of_testing_flags"><code>go</code> <code>test</code></a> 237 command accepts a new <code>-list</code> flag, which takes a regular 238 expression as an argument and prints to stdout the name of any 239 tests, benchmarks, or examples that match it, without running them. 240 </p> 241 242 243 <h3 id="go-tool-pprof">Pprof</h3> 244 245 <p> <!-- CL 34192 --> 246 Profiles produced by the <code>runtime/pprof</code> package now 247 include symbol information, so they can be viewed 248 in <code>go</code> <code>tool</code> <code>pprof</code> 249 without the binary that produced the profile. 250 </p> 251 252 <p> <!-- CL 38343 --> 253 The <code>go</code> <code>tool</code> <code>pprof</code> command now 254 uses the HTTP proxy information defined in the environment, using 255 <a href="/pkg/net/http/#ProxyFromEnvironment"><code>http.ProxyFromEnvironment</code></a>. 256 </p> 257 258 <h3 id="vet">Vet</h3> 259 260 <!-- CL 40112 --> 261 <p> 262 The <a href="/cmd/vet/"><code>vet</code> command</a> 263 has been better integrated into the 264 <a href="/cmd/go/"><code>go</code> tool</a>, 265 so <code>go</code> <code>vet</code> now supports all standard build 266 flags while <code>vet</code>'s own flags are now available 267 from <code>go</code> <code>vet</code> as well as 268 from <code>go</code> <code>tool</code> <code>vet</code>. 269 </p> 270 271 <h3 id="gccgo">Gccgo</h3> 272 273 <p> 274 Due to the alignment of Go's semiannual release schedule with GCC's 275 annual release schedule, 276 GCC release 7 contains the Go 1.8.3 version of gccgo. 277 We expect that the next release, GCC 8, will contain the Go 1.10 278 version of gccgo. 279 </p> 280 281 <h2 id="runtime">Runtime</h2> 282 283 <h3 id="callersframes">Call stacks with inlined frames</h3> 284 285 <p> 286 Users of 287 <a href="/pkg/runtime#Callers"><code>runtime.Callers</code></a> 288 should avoid directly inspecting the resulting PC slice and instead use 289 <a href="/pkg/runtime#CallersFrames"><code>runtime.CallersFrames</code></a> 290 to get a complete view of the call stack, or 291 <a href="/pkg/runtime#Caller"><code>runtime.Caller</code></a> 292 to get information about a single caller. 293 This is because an individual element of the PC slice cannot account 294 for inlined frames or other nuances of the call stack. 295 </p> 296 297 <p> 298 Specifically, code that directly iterates over the PC slice and uses 299 functions such as 300 <a href="/pkg/runtime#FuncForPC"><code>runtime.FuncForPC</code></a> 301 to resolve each PC individually will miss inlined frames. 302 To get a complete view of the stack, such code should instead use 303 <code>CallersFrames</code>. 304 Likewise, code should not assume that the length returned by 305 <code>Callers</code> is any indication of the call depth. 306 It should instead count the number of frames returned by 307 <code>CallersFrames</code>. 308 </p> 309 310 <p> 311 Code that queries a single caller at a specific depth should use 312 <code>Caller</code> rather than passing a slice of length 1 to 313 <code>Callers</code>. 314 </p> 315 316 <p> 317 <a href="/pkg/runtime#CallersFrames"><code>runtime.CallersFrames</code></a> 318 has been available since Go 1.7, so code can be updated prior to 319 upgrading to Go 1.9. 320 </p> 321 322 <h2 id="performance">Performance</h2> 323 324 <p> 325 As always, the changes are so general and varied that precise 326 statements about performance are difficult to make. Most programs 327 should run a bit faster, due to speedups in the garbage collector, 328 better generated code, and optimizations in the core library. 329 </p> 330 331 <h3 id="gc">Garbage Collector</h3> 332 333 <p> <!-- CL 37520 --> 334 Library functions that used to trigger stop-the-world garbage 335 collection now trigger concurrent garbage collection. 336 337 Specifically, <a href="/pkg/runtime/#GC"><code>runtime.GC</code></a>, 338 <a href="/pkg/runtime/debug/#SetGCPercent"><code>debug.SetGCPercent</code></a>, 339 and 340 <a href="/pkg/runtime/debug/#FreeOSMemory"><code>debug.FreeOSMemory</code></a>, 341 now trigger concurrent garbage collection, blocking only the calling 342 goroutine until the garbage collection is done. 343 </p> 344 345 <p> <!-- CL 34103, CL 39835 --> 346 The 347 <a href="/pkg/runtime/debug/#SetGCPercent"><code>debug.SetGCPercent</code></a> 348 function only triggers a garbage collection if one is immediately 349 necessary because of the new GOGC value. 350 This makes it possible to adjust GOGC on-the-fly. 351 </p> 352 353 <p> <!-- CL 38732 --> 354 Large object allocation performance is significantly improved in 355 applications using large (>50GB) heaps containing many large 356 objects. 357 </p> 358 359 <p> <!-- CL 34937 --> 360 The <a href="/pkg/runtime/#ReadMemStats"><code>runtime.ReadMemStats</code></a> 361 function now takes less than 100µs even for very large heaps. 362 </p> 363 364 <h2 id="library">Core library</h2> 365 366 <h3 id="monotonic-time">Transparent Monotonic Time support</h3> 367 368 <p> <!-- CL 36255 --> 369 The <a href="/pkg/time/"><code>time</code></a> package now transparently 370 tracks monotonic time in each <a href="/pkg/time/#Time"><code>Time</code></a> 371 value, making computing durations between two <code>Time</code> values 372 a safe operation in the presence of wall clock adjustments. 373 See the <a href="/pkg/time/#hdr-Monotonic_Clocks">package docs</a> and 374 <a href="https://golang.org/design/12914-monotonic">design document</a> 375 for details. 376 </p> 377 378 <h3 id="math-bits">New bit manipulation package</h3> 379 380 <p> <!-- CL 36315 --> 381 Go 1.9 includes a new package, 382 <a href="/pkg/math/bits/"><code>math/bits</code></a>, with optimized 383 implementations for manipulating bits. On most architectures, 384 functions in this package are additionally recognized by the 385 compiler and treated as intrinsics for additional performance. 386 </p> 387 388 <h3 id="test-helper">Test Helper Functions</h3> 389 390 <p> <!-- CL 38796 --> 391 The 392 new <a href="/pkg/testing/#T.Helper"><code>(*T).Helper</code></a> 393 and <a href="/pkg/testing/#B.Helper"><code>(*B).Helper</code></a> 394 methods mark the calling function as a test helper function. When 395 printing file and line information, that function will be skipped. 396 This permits writing test helper functions while still having useful 397 line numbers for users. 398 </p> 399 400 <h3 id="sync-map">Concurrent Map</h3> 401 402 <p> <!-- CL 36617 --> 403 The new <a href="/pkg/sync/#Map"><code>Map</code></a> type 404 in the <a href="/pkg/sync/"><code>sync</code></a> package 405 is a concurrent map with amortized-constant-time loads, stores, and 406 deletes. It is safe for multiple goroutines to call a <code>Map</code>'s methods 407 concurrently. 408 </p> 409 410 <h3 id="pprof-labels">Profiler Labels</h3> 411 412 <p><!-- CL 34198 --> 413 The <a href="/pkg/runtime/pprof"><code>runtime/pprof</code> package</a> 414 now supports adding labels to <code>pprof</code> profiler records. 415 Labels form a key-value map that is used to distinguish calls of the 416 same function in different contexts when looking at profiles 417 with the <a href="/cmd/pprof/"><code>pprof</code> command</a>. 418 The <code>pprof</code> package's 419 new <a href="/pkg/runtime/pprof/#Do"><code>Do</code> function</a> 420 runs code associated with some provided labels. Other new functions 421 in the package help work with labels. 422 </p> 423 424 </dl><!-- runtime/pprof --> 425 426 427 <h3 id="minor_library_changes">Minor changes to the library</h3> 428 429 <p> 430 As always, there are various minor changes and updates to the library, 431 made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a> 432 in mind. 433 </p> 434 435 <dl id="archive/zip"><dt><a href="/pkg/archive/zip/">archive/zip</a></dt> 436 <dd> 437 <p><!-- CL 39570 --> 438 The 439 ZIP <a href="/pkg/archive/zip/#Writer"><code>Writer</code></a> 440 now sets the UTF-8 bit in 441 the <a href="/pkg/archive/zip/#FileHeader.Flags"><code>FileHeader.Flags</code></a> 442 when appropriate. 443 </p> 444 445 </dl><!-- archive/zip --> 446 447 <dl id="crypto/rand"><dt><a href="/pkg/crypto/rand/">crypto/rand</a></dt> 448 <dd> 449 <p><!-- CL 43852 --> 450 On Linux, Go now calls the <code>getrandom</code> system call 451 without the <code>GRND_NONBLOCK</code> flag; it will now block 452 until the kernel has sufficient randomness. On kernels predating 453 the <code>getrandom</code> system call, Go continues to read 454 from <code>/dev/urandom</code>. 455 </p> 456 457 </dl><!-- crypto/rand --> 458 459 <dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt> 460 <dd> 461 <p><!-- CL 36093 --> 462 463 On Unix systems the environment 464 variables <code>SSL_CERT_FILE</code> 465 and <code>SSL_CERT_DIR</code> can now be used to override the 466 system default locations for the SSL certificate file and SSL 467 certificate files directory, respectively. 468 </p> 469 470 <p>The FreeBSD file <code>/usr/local/etc/ssl/cert.pem</code> is 471 now included in the certificate search path. 472 </p> 473 474 <p><!-- CL 36900 --> 475 476 The package now supports excluded domains in name constraints. 477 In addition to enforcing such constraints, 478 <a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a> 479 will create certificates with excluded name constraints 480 if the provided template certificate has the new 481 field 482 <a href="/pkg/crypto/x509/#Certificate.ExcludedDNSDomains"><code>ExcludedDNSDomains</code></a> 483 populated. 484 </p> 485 486 <p><!-- CL 36696 --> 487 488 If any SAN extension, including with no DNS names, is present 489 in the certificate, then the Common Name from 490 <a href="/pkg/crypto/x509/#Certificate.Subject"><code>Subject</code></a> is ignored. 491 In previous releases, the code tested only whether DNS-name SANs were 492 present in a certificate. 493 </p> 494 495 </dl><!-- crypto/x509 --> 496 497 <dl id="database/sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt> 498 <dd> 499 <p><!-- CL 35476 --> 500 The package will now use a cached <a href="/pkg/database/sql/#Stmt"><code>Stmt</code></a> if 501 available in <a href="/pkg/database/sql/#Tx.Stmt"><code>Tx.Stmt</code></a>. 502 This prevents statements from being re-prepared each time 503 <a href="/pkg/database/sql/#Tx.Stmt"><code>Tx.Stmt</code></a> is called. 504 </p> 505 506 <p><!-- CL 38533 --> 507 The package now allows drivers to implement their own argument checkers by implementing 508 <a href="/pkg/database/sql/driver/#NamedValueChecker"><code>driver.NamedValueChecker</code></a>. 509 This also allows drivers to support <code>OUTPUT</code> and <code>INOUT</code> parameter types. 510 <a href="/pkg/database/sql/#Out"><code>Out</code></a> should be used to return output parameters 511 when supported by the driver. 512 </p> 513 514 <p><!-- CL 39031 --> 515 <a href="/pkg/database/sql/#Rows.Scan"><code>Rows.Scan</code></a> can now scan user-defined string types. 516 Previously the package supported scanning into numeric types like <code>type</code> <code>Int</code> <code>int64</code>. It now also supports 517 scanning into string types like <code>type</code> <code>String</code> <code>string</code>. 518 </p> 519 520 <p><!-- CL 40694 --> 521 The new <a href="/pkg/database/sql/#DB.Conn"><code>DB.Conn</code></a> method returns the new 522 <a href="/pkg/database/sql/#Conn"><code>Conn</code></a> type representing an 523 exclusive connection to the database from the connection pool. All queries run on 524 a <a href="/pkg/database/sql/#Conn"><code>Conn</code></a> will use the same underlying 525 connection until <a href="/pkg/database/sql/#Conn.Close"><code>Conn.Close</code></a> is called 526 to return the connection to the connection pool. 527 </p> 528 529 </dl><!-- database/sql --> 530 531 <dl id="encoding/asn1"><dt><a href="/pkg/encoding/asn1/">encoding/asn1</a></dt> 532 <dd> 533 <p><!-- CL 38660 --> 534 The new 535 <a href="/pkg/encoding/asn1/#NullBytes"><code>NullBytes</code></a> 536 and 537 <a href="/pkg/encoding/asn1/#NullRawValue"><code>NullRawValue</code></a> 538 represent the ASN.1 NULL type. 539 </p> 540 541 </dl><!-- encoding/asn1 --> 542 543 <dl id="encoding/base32"><dt><a href="/pkg/encoding/base32/">encoding/base32</a></dt> 544 <dd> 545 <p><!-- CL 38634 --> 546 The new <a href="/pkg/encoding/base32/#Encoding.WithPadding">Encoding.WithPadding</a> 547 method adds support for custom padding characters and disabling padding. 548 </p> 549 550 </dl><!-- encoding/base32 --> 551 552 <dl id="encoding/csv"><dt><a href="/pkg/encoding/csv/">encoding/csv</a></dt> 553 <dd> 554 <p><!-- CL 41730 --> 555 The new field 556 <a href="/pkg/encoding/csv/#Reader.ReuseRecord"><code>Reader.ReuseRecord</code></a> 557 controls whether calls to 558 <a href="/pkg/encoding/csv/#Reader.Read"><code>Read</code></a> 559 may return a slice sharing the backing array of the previous 560 call's returned slice for improved performance. 561 </p> 562 563 </dl><!-- encoding/csv --> 564 565 <dl id="fmt"><dt><a href="/pkg/fmt/">fmt</a></dt> 566 <dd> 567 <p><!-- CL 37051 --> 568 The sharp flag ('<code>#</code>') is now supported when printing 569 floating point and complex numbers. It will always print a 570 decimal point 571 for <code>%e</code>, <code>%E</code>, <code>%f</code>, <code>%F</code>, <code>%g</code> 572 and <code>%G</code>; it will not remove trailing zeros 573 for <code>%g</code> and <code>%G</code>. 574 </p> 575 576 </dl><!-- fmt --> 577 578 <dl id="hash/fnv"><dt><a href="/pkg/hash/fnv/">hash/fnv</a></dt> 579 <dd> 580 <p><!-- CL 38356 --> 581 The package now includes 128-bit FNV-1 and FNV-1a hash support with 582 <a href="/pkg/hash/fnv/#New128"><code>New128</code></a> and 583 <a href="/pkg/hash/fnv/#New128a"><code>New128a</code></a>, respectively. 584 </p> 585 586 </dl><!-- hash/fnv --> 587 588 <dl id="html/template"><dt><a href="/pkg/html/template/">html/template</a></dt> 589 <dd> 590 <p><!-- CL 37880, CL 40936 --> 591 The package now reports an error if a predefined escaper (one of 592 "html", "urlquery" and "js") is found in a pipeline and does not match 593 what the auto-escaper would have decided on its own. 594 This avoids certain security or correctness issues. 595 Now use of one of these escapers is always either a no-op or an error. 596 (The no-op case eases migration from <a href="/pkg/text/template/">text/template</a>.) 597 </p> 598 599 </dl><!-- html/template --> 600 601 <dl id="image"><dt><a href="/pkg/image/">image</a></dt> 602 <dd> 603 <p><!-- CL 36734 --> 604 The <a href="/pkg/image/#Rectangle.Intersect"><code>Rectangle.Intersect</code></a> 605 method now returns a zero <code>Rectangle</code> when called on 606 adjacent but non-overlapping rectangles, as documented. In 607 earlier releases it would incorrectly return an empty but 608 non-zero <code>Rectangle</code>. 609 </p> 610 611 </dl><!-- image --> 612 613 <dl id="image/color"><dt><a href="/pkg/image/color/">image/color</a></dt> 614 <dd> 615 <p><!-- CL 36732 --> 616 The YCbCr to RGBA conversion formula has been tweaked to ensure 617 that rounding adjustments span the complete [0, 0xffff] RGBA 618 range. 619 </p> 620 621 </dl><!-- image/color --> 622 623 <dl id="image/png"><dt><a href="/pkg/image/png/">image/png</a></dt> 624 <dd> 625 <p><!-- CL 34150 --> 626 The new <a href="/pkg/image/png/#Encoder.BufferPool"><code>Encoder.BufferPool</code></a> 627 field allows specifying an <a href="/pkg/image/png/#EncoderBufferPool"><code>EncoderBufferPool</code></a>, 628 that will be used by the encoder to get temporary <code>EncoderBuffer</code> 629 buffers when encoding a PNG image. 630 631 The use of a <code>BufferPool</code> reduces the number of 632 memory allocations performed while encoding multiple images. 633 </p> 634 635 <p><!-- CL 38271 --> 636 The package now supports the decoding of transparent 8-bit 637 grayscale ("Gray8") images. 638 </p> 639 640 </dl><!-- image/png --> 641 642 <dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt> 643 <dd> 644 <p><!-- CL 36487 --> 645 The new 646 <a href="/pkg/math/big/#Int.IsInt64"><code>IsInt64</code></a> 647 and 648 <a href="/pkg/math/big/#Int.IsUint64"><code>IsUint64</code></a> 649 methods report whether an <code>Int</code> 650 may be represented as an <code>int64</code> or <code>uint64</code> 651 value. 652 </p> 653 654 </dl><!-- math/big --> 655 656 <dl id="mime/multipart"><dt><a href="/pkg/mime/multipart/">mime/multipart</a></dt> 657 <dd> 658 <p><!-- CL 39223 --> 659 The new 660 <a href="/pkg/mime/multipart/#FileHeader.Size"><code>FileHeader.Size</code></a> 661 field describes the size of a file in a multipart message. 662 </p> 663 664 </dl><!-- mime/multipart --> 665 666 <dl id="net"><dt><a href="/pkg/net/">net</a></dt> 667 <dd> 668 <p><!-- CL 32572 --> 669 The new 670 <a href="/pkg/net/#Resolver.StrictErrors"><code>Resolver.StrictErrors</code></a> 671 provides control over how Go's built-in DNS resolver handles 672 temporary errors during queries composed of multiple sub-queries, 673 such as an A+AAAA address lookup. 674 </p> 675 676 <p><!-- CL 37260 --> 677 The new 678 <a href="/pkg/net/#Resolver.Dial"><code>Resolver.Dial</code></a> 679 allows a <code>Resolver</code> to use a custom dial function. 680 </p> 681 682 <p><!-- CL 40510 --> 683 <a href="/pkg/net/#JoinHostPort"><code>JoinHostPort</code></a> now only places an address in square brackets if the host contains a colon. 684 In previous releases it would also wrap addresses in square brackets if they contained a percent ('<code>%</code>') sign. 685 </p> 686 687 <p><!-- CL 37913 --> 688 The new methods 689 <a href="/pkg/net/#TCPConn.SyscallConn"><code>TCPConn.SyscallConn</code></a>, 690 <a href="/pkg/net/#IPConn.SyscallConn"><code>IPConn.SyscallConn</code></a>, 691 <a href="/pkg/net/#UDPConn.SyscallConn"><code>UDPConn.SyscallConn</code></a>, 692 and 693 <a href="/pkg/net/#UnixConn.SyscallConn"><code>UnixConn.SyscallConn</code></a> 694 provide access to the connections' underlying file descriptors. 695 </p> 696 697 <p><!-- 45088 --> 698 It is now safe to call <a href="/pkg/net/#Dial"><code>Dial</code></a> with the address obtained from 699 <code>(*TCPListener).String()</code> after creating the listener with 700 <code><a href="/pkg/net/#Listen">Listen</a>("tcp", ":0")</code>. 701 Previously it failed on some machines with half-configured IPv6 stacks. 702 </p> 703 704 </dl><!-- net --> 705 706 <dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt> 707 <dd> 708 709 <p><!-- CL 37328 --> 710 The <a href="/pkg/net/http/#Cookie.String"><code>Cookie.String</code></a> method, used for 711 <code>Cookie</code> and <code>Set-Cookie</code> headers, now encloses values in double quotes 712 if the value contains either a space or a comma. 713 </p> 714 715 <p>Server changes:</p> 716 <ul> 717 <li><!-- CL 38194 --> 718 <a href="/pkg/net/http/#ServeMux"><code>ServeMux</code></a> now ignores ports in the host 719 header when matching handlers. The host is matched unmodified for <code>CONNECT</code> requests. 720 </li> 721 722 <li><!-- CL 44074 --> 723 The new <a href="/pkg/net/http/#Server.ServeTLS"><code>Server.ServeTLS</code></a> method wraps 724 <a href="/pkg/net/http/#Server.Serve"><code>Server.Serve</code></a> with added TLS support. 725 </li> 726 727 <li><!-- CL 34727 --> 728 <a href="/pkg/net/http/#Server.WriteTimeout"><code>Server.WriteTimeout</code></a> 729 now applies to HTTP/2 connections and is enforced per-stream. 730 </li> 731 732 <li><!-- CL 43231 --> 733 HTTP/2 now uses the priority write scheduler by default. 734 Frames are scheduled by following HTTP/2 priorities as described in 735 <a href="https://tools.ietf.org/html/rfc7540#section-5.3">RFC 7540 Section 5.3</a>. 736 </li> 737 738 <li><!-- CL 36483 --> 739 The HTTP handler returned by <a href="/pkg/net/http/#StripPrefix"><code>StripPrefix</code></a> 740 now calls its provided handler with a modified clone of the original <code>*http.Request</code>. 741 Any code storing per-request state in maps keyed by <code>*http.Request</code> should 742 use 743 <a href="/pkg/net/http/#Request.Context"><code>Request.Context</code></a>, 744 <a href="/pkg/net/http/#Request.WithContext"><code>Request.WithContext</code></a>, 745 and 746 <a href="/pkg/context/#WithValue"><code>context.WithValue</code></a> instead. 747 </li> 748 749 <li><!-- CL 35490 --> 750 <a href="/pkg/net/http/#LocalAddrContextKey"><code>LocalAddrContextKey</code></a> now contains 751 the connection's actual network address instead of the interface address used by the listener. 752 </li> 753 </ul> 754 755 <p>Client & Transport changes:</p> 756 <ul> 757 <li><!-- CL 35488 --> 758 The <a href="/pkg/net/http/#Transport"><code>Transport</code></a> 759 now supports making requests via SOCKS5 proxy when the URL returned by 760 <a href="/pkg/net/http/#Transport.Proxy"><code>Transport.Proxy</code></a> 761 has the scheme <code>socks5</code>. 762 </li> 763 </ul> 764 765 </dl><!-- net/http --> 766 767 <dl id="net/http/fcgi"><dt><a href="/pkg/net/http/fcgi/">net/http/fcgi</a></dt> 768 <dd> 769 <p><!-- CL 40012 --> 770 The new 771 <a href="/pkg/net/http/fcgi/#ProcessEnv"><code>ProcessEnv</code></a> 772 function returns FastCGI environment variables associated with an HTTP request 773 for which there are no appropriate 774 <a href="/pkg/net/http/#Request"><code>http.Request</code></a> 775 fields, such as <code>REMOTE_USER</code>. 776 </p> 777 778 </dl><!-- net/http/fcgi --> 779 780 <dl id="net/http/httptest"><dt><a href="/pkg/net/http/httptest/">net/http/httptest</a></dt> 781 <dd> 782 <p><!-- CL 34639 --> 783 The new 784 <a href="/pkg/net/http/httptest/#Server.Client"><code>Server.Client</code></a> 785 method returns an HTTP client configured for making requests to the test server. 786 </p> 787 788 <p> 789 The new 790 <a href="/pkg/net/http/httptest/#Server.Certificate"><code>Server.Certificate</code></a> 791 method returns the test server's TLS certificate, if any. 792 </p> 793 794 </dl><!-- net/http/httptest --> 795 796 <dl id="net/http/httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt> 797 <dd> 798 <p><!-- CL 43712 --> 799 The <a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a> 800 now proxies all HTTP/2 response trailers, even those not declared in the initial response 801 header. Such undeclared trailers are used by the gRPC protocol. 802 </p> 803 804 </dl><!-- net/http/httputil --> 805 806 <dl id="os"><dt><a href="/pkg/os/">os</a></dt> 807 <dd> 808 <p><!-- CL 36800 --> 809 The <code>os</code> package now uses the internal runtime poller 810 for file I/O. 811 This reduces the number of threads required for read/write 812 operations on pipes, and it eliminates races when one goroutine 813 closes a file while another is using the file for I/O. 814 </p> 815 816 <dd> 817 <p><!-- CL 37915 --> 818 On Windows, 819 <a href="/pkg/os/#Args"><code>Args</code></a> 820 is now populated without <code>shell32.dll</code>, improving process start-up time by 1-7 ms. 821 </p> 822 823 </dl><!-- os --> 824 825 <dl id="os/exec"><dt><a href="/pkg/os/exec/">os/exec</a></dt> 826 <dd> 827 <p><!-- CL 37586 --> 828 The <code>os/exec</code> package now prevents child processes from being created with 829 any duplicate environment variables. 830 If <a href="/pkg/os/exec/#Cmd.Env"><code>Cmd.Env</code></a> 831 contains duplicate environment keys, only the last 832 value in the slice for each duplicate key is used. 833 </p> 834 835 </dl><!-- os/exec --> 836 837 <dl id="os/user"><dt><a href="/pkg/os/user/">os/user</a></dt> 838 <dd> 839 <p><!-- CL 37664 --> 840 <a href="/pkg/os/user/#Lookup"><code>Lookup</code></a> and 841 <a href="/pkg/os/user/#LookupId"><code>LookupId</code></a> now 842 work on Unix systems when <code>CGO_ENABLED=0</code> by reading 843 the <code>/etc/passwd</code> file. 844 </p> 845 846 <p><!-- CL 33713 --> 847 <a href="/pkg/os/user/#LookupGroup"><code>LookupGroup</code></a> and 848 <a href="/pkg/os/user/#LookupGroupId"><code>LookupGroupId</code></a> now 849 work on Unix systems when <code>CGO_ENABLED=0</code> by reading 850 the <code>/etc/group</code> file. 851 </p> 852 853 </dl><!-- os/user --> 854 855 <dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt> 856 <dd> 857 <p><!-- CL 38335 --> 858 The new 859 <a href="/pkg/reflect/#MakeMapWithSize"><code>MakeMapWithSize</code></a> 860 function creates a map with a capacity hint. 861 </p> 862 863 </dl><!-- reflect --> 864 865 <dl id="runtime"><dt><a href="/pkg/runtime/">runtime</a></dt> 866 <dd> 867 <p><!-- CL 37233, CL 37726 --> 868 Tracebacks generated by the runtime and recorded in profiles are 869 now accurate in the presence of inlining. 870 To retrieve tracebacks programmatically, applications should use 871 <a href="/pkg/runtime/#CallersFrames"><code>runtime.CallersFrames</code></a> 872 rather than directly iterating over the results of 873 <a href="/pkg/runtime/#Callers"><code>runtime.Callers</code></a>. 874 </p> 875 876 <p><!-- CL 38403 --> 877 On Windows, Go no longer forces the system timer to run at high 878 resolution when the program is idle. 879 This should reduce the impact of Go programs on battery life. 880 </p> 881 882 <p><!-- CL 29341 --> 883 On FreeBSD, <code>GOMAXPROCS</code> and 884 <a href="/pkg/runtime/#NumCPU"><code>runtime.NumCPU</code></a> 885 are now based on the process' CPU mask, rather than the total 886 number of CPUs. 887 </p> 888 889 <p><!-- CL 43641 --> 890 The runtime has preliminary support for Android O. 891 </p> 892 893 </dl><!-- runtime --> 894 895 <dl id="runtime/debug"><dt><a href="/pkg/runtime/debug/">runtime/debug</a></dt> 896 <dd> 897 <p><!-- CL 34013 --> 898 Calling 899 <a href="/pkg/runtime/debug/#SetGCPercent"><code>SetGCPercent</code></a> 900 with a negative value no longer runs an immediate garbage collection. 901 </p> 902 903 </dl><!-- runtime/debug --> 904 905 <dl id="runtime/trace"><dt><a href="/pkg/runtime/trace/">runtime/trace</a></dt> 906 <dd> 907 <p><!-- CL 36015 --> 908 The execution trace now displays mark assist events, which 909 indicate when an application goroutine is forced to assist 910 garbage collection because it is allocating too quickly. 911 </p> 912 913 <p><!-- CL 40810 --> 914 "Sweep" events now encompass the entire process of finding free 915 space for an allocation, rather than recording each individual 916 span that is swept. 917 This reduces allocation latency when tracing allocation-heavy 918 programs. 919 The sweep event shows how many bytes were swept and how many 920 were reclaimed. 921 </p> 922 923 </dl><!-- runtime/trace --> 924 925 <dl id="sync"><dt><a href="/pkg/sync/">sync</a></dt> 926 <dd> 927 <p><!-- CL 34310 --> 928 <a href="/pkg/sync/#Mutex"><code>Mutex</code></a> is now more fair. 929 </p> 930 931 </dl><!-- sync --> 932 933 <dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt> 934 <dd> 935 <p><!-- CL 36697 --> 936 The new field 937 <a href="/pkg/syscall/#Credential.NoSetGroups"><code>Credential.NoSetGroups</code></a> 938 controls whether Unix systems make a <code>setgroups</code> system call 939 to set supplementary groups when starting a new process. 940 </p> 941 942 <p><!-- CL 43512 --> 943 The new field 944 <a href="/pkg/syscall/#SysProcAttr.AmbientCaps"><code>SysProcAttr.AmbientCaps</code></a> 945 allows setting ambient capabilities on Linux 4.3+ when creating 946 a new process. 947 </p> 948 949 <p><!-- CL 37439 --> 950 On 64-bit x86 Linux, process creation latency has been optimized with 951 use of <code>CLONE_VFORK</code> and <code>CLONE_VM</code>. 952 </p> 953 954 <p><!-- CL 37913 --> 955 The new 956 <a href="/pkg/syscall/#Conn"><code>Conn</code></a> 957 interface describes some types in the 958 <a href="/pkg/net/"><code>net</code></a> 959 package that can provide access to their underlying file descriptor 960 using the new 961 <a href="/pkg/syscall/#RawConn"><code>RawConn</code></a> 962 interface. 963 </p> 964 965 </dl><!-- syscall --> 966 967 968 <dl id="testing/quick"><dt><a href="/pkg/testing/quick/">testing/quick</a></dt> 969 <dd> 970 <p><!-- CL 39152 --> 971 The package now chooses values in the full range when 972 generating <code>int64</code> and <code>uint64</code> random 973 numbers; in earlier releases generated values were always 974 limited to the [-2<sup>62</sup>, 2<sup>62</sup>) range. 975 </p> 976 977 <p> 978 In previous releases, using a nil 979 <a href="/pkg/testing/quick/#Config.Rand"><code>Config.Rand</code></a> 980 value caused a fixed deterministic random number generator to be used. 981 It now uses a random number generator seeded with the current time. 982 For the old behavior, set <code>Config.Rand</code> to <code>rand.New(rand.NewSource(0))</code>. 983 </p> 984 985 </dl><!-- testing/quick --> 986 987 <dl id="text/template"><dt><a href="/pkg/text/template/">text/template</a></dt> 988 <dd> 989 <p><!-- CL 38420 --> 990 The handling of empty blocks, which was broken by a Go 1.8 991 change that made the result dependent on the order of templates, 992 has been fixed, restoring the old Go 1.7 behavior. 993 </p> 994 995 </dl><!-- text/template --> 996 997 <dl id="time"><dt><a href="/pkg/time/">time</a></dt> 998 <dd> 999 <p><!-- CL 36615 --> 1000 The new methods 1001 <a href="/pkg/time/#Duration.Round"><code>Duration.Round</code></a> 1002 and 1003 <a href="/pkg/time/#Duration.Truncate"><code>Duration.Truncate</code></a> 1004 handle rounding and truncating durations to multiples of a given duration. 1005 </p> 1006 1007 <p><!-- CL 35710 --> 1008 Retrieving the time and sleeping now work correctly under Wine. 1009 </p> 1010 1011 <p> 1012 If a <code>Time</code> value has a monotonic clock reading, its 1013 string representation (as returned by <code>String</code>) now includes a 1014 final field <code>"m=±value"</code>, where <code>value</code> is the 1015 monotonic clock reading formatted as a decimal number of seconds. 1016 </p> 1017 1018 <p><!-- CL 44832 --> 1019 The included <code>tzdata</code> timezone database has been 1020 updated to version 2017b. As always, it is only used if the 1021 system does not already have the database available. 1022 </p> 1023 1024 </dl><!-- time -->