github.com/activestate/go@v0.0.0-20170614201249-0b81c023a722/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">DRAFT RELEASE NOTES - Introduction to Go 1.9</h2> 19 20 <p><strong> 21 Go 1.9 is not yet released. These are work-in-progress 22 release notes. Go 1.9 is expected to be released in August 2017. 23 </strong></p> 24 25 <p> 26 The latest Go release, version 1.9, arrives six months 27 after <a href="go1.8">Go 1.8</a> and is the tenth release in 28 the <a href="https://golang.org/doc/devel/release.html">Go 1.x 29 series</a>. 30 There is one <a href="#language">change to the language</a>, adding 31 support for type aliases. 32 Most of the changes are in the implementation of the toolchain, 33 runtime, and libraries. 34 As always, the release maintains the Go 1 35 <a href="/doc/go1compat.html">promise of compatibility</a>. 36 We expect almost all Go programs to continue to compile and run as 37 before. 38 </p> 39 40 <p> 41 The release 42 adds <a href="#monotonic-time">transparent monotonic time support</a>, 43 <a href="#parallel-compile">parallelizes compilation of functions</a> within a package, 44 better supports <a href="#test-helper">test helper functions</a>, 45 includes a new <a href="#math-bits">bit manipulation package</a>, 46 and has a new <a href="#sync-map">concurrent map type</a>. 47 </p> 48 49 <h2 id="language">Changes to the language</h2> 50 51 <p> 52 There is one change to the language. 53 Go now supports type aliases to support gradual code repair while 54 moving a type between packages. 55 The <a href="https://golang.org/design/18130-type-alias">type alias 56 design document</a> 57 and <a href="https://talks.golang.org/2016/refactor.article">an 58 article on refactoring</a> cover the problem in detail. 59 In short, a type alias declaration has the form: 60 </p> 61 62 <pre> 63 type T1 = T2 64 </pre> 65 66 <p> 67 This declaration introduces an alias name <code>T1</code>—an 68 alternate spelling—for the type denoted by <code>T2</code>; that is, 69 both <code>T1</code> and <code>T2</code> denote the same type. 70 </p> 71 72 <h2 id="ports">Ports</h2> 73 74 <p> 75 There are no new supported operating systems or processor 76 architectures in this release. 77 </p> 78 79 <h3 id="power8">ppc64x requires Power8</h3> 80 81 <p> <!-- CL 36725, CL 36832 --> 82 Both <code>GOARCH=ppc64</code> and <code>GOARCH=ppc64le</code> now 83 require at least Power8 support. In previous releases, 84 only <code>GOARCH=ppc64le</code> required Power8 and the big 85 endian <code>ppc64</code> architecture supported older 86 hardware. 87 <p> 88 89 <h3 id="known_issues">Known Issues</h3> 90 91 <p> 92 There are some instabilities on FreeBSD that are known but not understood. 93 These can lead to program crashes in rare cases. 94 See <a href="https://golang.org/issue/15658">issue 15658</a>. 95 Any help in solving this FreeBSD-specific issue would be appreciated. 96 </p> 97 98 <h2 id="tools">Tools</h2> 99 100 <h3 id="parallel-compile">Parallel Compilation</h3> 101 102 <p> 103 The Go compiler now supports compiling a package's functions in parallel, taking 104 advantage of multiple cores. This is in addition to the <code>go</code> command's 105 existing support for parallel compilation of separate packages. 106 Parallel compilation is on by default, but can be disabled by setting the 107 environment variable <code>GO19CONCURRENTCOMPILATION</code> to <code>0</code>. 108 </p> 109 110 <h3 id="compiler">Compiler Toolchain</h3> 111 112 <p><!-- CL 37441 --> 113 Complex division is now C99-compatible. This has always been the 114 case in gccgo and is now fixed in the gc toolchain. 115 </p> 116 117 <p> <!-- CL 36983 --> 118 The linker will now generate DWARF information for cgo executables on Windows. 119 </p> 120 121 <p> <!-- CL 44210, CL 40095 --> 122 The compiler now includes lexical scopes in the generated DWARF, allowing 123 debuggers to hide variables that are not in scope. The <code>.debug_info</code> 124 section is now DWARF version 4. 125 </p> 126 127 <h3 id="go-test-list">Go test</h3> 128 129 <p> <!-- CL 41195 --> 130 The <a href="/cmd/go/#hdr-Description_of_testing_flags"><code>go</code> <code>test</code></a> 131 command accepts a new <code>-list</code> flag, which takes a regular 132 expression as an argument and prints to stdout the name of any 133 tests, benchmarks, or examples that match it, without running them. 134 </p> 135 136 137 <!-- CL 42028: https://golang.org/cl/42028: cmd/asm: fix operand order of ARM's MULA instruction --> 138 <!-- CL 36031: https://golang.org/cl/36031: cmd/doc: truncate long lists of arguments --> 139 <!-- CL 38438: https://golang.org/cl/38438: cmd/doc: implement "go doc struct.field" --> 140 <!-- CL 38745: https://golang.org/cl/38745: cmd/go: exclude vendored packages from ... matches --> 141 <!-- CL 38757: https://golang.org/cl/38757: cmd/go: add -json flag to go env --> 142 <!-- CL 40112: https://golang.org/cl/40112: cmd/go: allow full flag processing in go vet --> 143 <!-- CL 43855: https://golang.org/cl/43855: cmd/go: include GOARM and GO386 in computed build ID --> 144 <!-- CL 42990: https://golang.org/cl/42990: cmd/internal/obj/x86: add ADDSUBPS/PD --> 145 <!-- CL 40331: https://golang.org/cl/40331: cmd/link,runtime/cgo: enable PT_TLS generation on OpenBSD --> 146 <!-- CL 38343: https://golang.org/cl/38343: cmd/pprof: use proxy from environment --> 147 148 149 <h2 id="performance">Performance</h2> 150 151 <p> 152 As always, the changes are so general and varied that precise 153 statements about performance are difficult to make. Most programs 154 should run a bit faster, due to speedups in the garbage collector, 155 better generated code, and optimizations in the core library. 156 </p> 157 158 <p> <!-- CL 39203 --> 159 TODO: There have been significant optimizations bringing more than 10% improvements 160 to implementations in the 161 <a href="/pkg/encoding/gob"><code>encoding/gob</code></a>, and ... 162 packages. 163 </p> 164 165 <h3 id="gc">Garbage Collector</h3> 166 167 <p> <!-- CL 37520 --> 168 Library functions that used to trigger stop-the-world garbage 169 collection now trigger concurrent garbage collection. 170 171 Specifically, <a href="/pkg/runtime/#GC"><code>runtime.GC</code></a>, 172 <a href="/pkg/runtime/debug/#SetGCPercent"><code>debug.SetGCPercent</code></a>, 173 and 174 <a href="/pkg/runtime/debug/#FreeOSMemory"><code>debug.FreeOSMemory</code></a>, 175 now trigger concurrent garbage collection, blocking only the calling 176 goroutine until the garbage collection is done. 177 </p> 178 179 <p> <!-- CL 34103, CL 39835 --> 180 The 181 <a href="/pkg/runtime/debug/#SetGCPercent"><code>debug.SetGCPercent</code></a> 182 function only triggers a garbage collection if one is immediately 183 necessary because of the new GOGC value. 184 This makes it possible to adjust GOGC on-the-fly. 185 </p> 186 187 <p> <!-- CL 38732 --> 188 Large object allocation performance is significantly improved in 189 applications using large (>50GB) heaps containing many large 190 objects. 191 </p> 192 193 <p> <!-- CL 34937 --> 194 The <a href="/pkg/runtime/#ReadMemStats"><code>runtime.ReadMemStats</code></a> 195 function now takes less than 100µs even for very large heaps. 196 </p> 197 198 <h2 id="library">Core library</h2> 199 200 <h3 id="monotonic-time">Transparent Monotonic Time support</h3> 201 202 <p> <!-- CL 36255 --> 203 The <a href="/pkg/time/"><code>time</code></a> package now transparently 204 tracks monotonic time in each <a href="/pkg/time/#Time"><code>Time</code></a> 205 value, making computing durations between two <code>Time</code> values 206 a safe operation in the presence of wall clock adjustments. 207 See the <a href="/pkg/time/#hdr-Monotonic_Clocks">package docs</a> and 208 <a href="https://golang.org/design/12914-monotonic">design document</a> 209 for details. 210 </p> 211 212 <h3 id="math-bits">New bit manipulation package</h3> 213 214 <p> <!-- CL 36315 --> 215 Go 1.9 includes a new package, 216 <a href="/pkg/math/bits/"><code>math/bits</code></a>, with optimized 217 implementations for manipulating bits. On most architectures 218 functions in this package are additionally recognized by the 219 compiler and treated as intrinsics for additional performance. 220 </p> 221 222 <h3 id="test-helper">Test Helper Functions</h3> 223 224 <p> <!-- CL 38796 --> 225 The 226 new <a href="/pkg/testing/#T.Helper"><code>(*T).Helper</code></a> 227 an <a href="/pkg/testing/#B.Helper"><code>(*B).Helper</code></a> 228 methods mark the calling function as a test helper function. When 229 printing file and line information, that function will be skipped. 230 This permits writing test helper functions while still having useful 231 line numbers for users. 232 </p> 233 234 <h3 id="sync-map">Concurrent Map</h3> 235 236 <p> <!-- CL 36617 --> 237 The new <a href="/pkg/sync/#Map"><code>Map</code></a> type 238 in the <a href="/pkg/sync/"><code>sync</code></a> package 239 is a concurrent map with amortized-constant-time loads, stores, and 240 deletes. It is safe for multiple goroutines to call a Map's methods 241 concurrently. 242 </p> 243 244 <h3 id="minor_library_changes">Minor changes to the library</h3> 245 246 <p> 247 As always, there are various minor changes and updates to the library, 248 made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a> 249 in mind. 250 </p> 251 252 <dl id="archive/zip"><dt><a href="/pkg/archive/zip/">archive/zip</a></dt> 253 <dd> 254 <p><!-- CL 39570 --> 255 The 256 ZIP <a href="/pkg/archive/zip/#Writer"><code>Writer</code></a> 257 now sets the UTF-8 bit in 258 the <a href="/pkg/archive/zip/#FileHeader.Flags"><code>FileHeader.Flags</code></a> 259 when appropriate. 260 </p> 261 262 </dl><!-- archive/zip --> 263 264 <dl id="crypto/rand"><dt><a href="/pkg/crypto/rand/">crypto/rand</a></dt> 265 <dd> 266 <p><!-- CL 43852 --> 267 On Linux, Go now calls the <code>getrandom</code> system call 268 without the <code>GRND_NONBLOCK</code> flag; it will now block 269 until the kernel has sufficient randomness. On kernels predating 270 the <code>getrandom</code> system call, Go continues to read 271 from <code>/dev/urandom</code>. 272 </p> 273 274 </dl><!-- crypto/rand --> 275 276 <dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt> 277 <dd> 278 <p><!-- CL 36093 --> 279 280 On Unix systems the environment 281 variables <code>SSL_CERT_FILE</code> 282 and <code>SSL_CERT_DIR</code> can now be used to override the 283 system default locations for the SSL certificate file and SSL 284 certificate files directory, respectively. 285 </p> 286 287 <p>The FreeBSD path <code>/usr/local/etc/ssl/cert.pem</code> is 288 now included in the certificate search path. 289 </p> 290 291 <p><!-- CL 36900 --> 292 293 The package now supports excluded domains in name constraints. 294 In addition to enforcing such constraints, 295 <a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a> 296 will create certificates with excluded name constraints 297 if the provided template certificate has the new 298 field 299 <a href="/pkg/crypto/x509/#Certificate.ExcludedDNSDomains"><code>ExcludedDNSDomains</code></a> 300 populated. 301 </p> 302 303 </dl><!-- crypto/x509 --> 304 305 <dl id="database/sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt> 306 <dd> 307 <p><!-- CL 35476 --> 308 The package will now use a cached <a href="/pkg/database/sql/#Stmt"><code>Stmt</code></a> if 309 available in <a href="/pkg/database/sql/#Tx.Stmt"><code>Tx.Stmt</code></a>. 310 This prevents statements from being re-prepared each time 311 <a href="/pkg/database/sql/#Tx.Stmt"><code>Tx.Stmt</code></a> is called. 312 </p> 313 314 <p><!-- CL 38533 --> 315 The package now allows drivers to implement their own argument checkers by implementing 316 <a href="/pkg/database/sql/driver/#NamedValueChecker"><code>driver.NamedValueChecker</code></a>. 317 This also allows drivers to support <code>OUTPUT</code> and <code>INOUT</code> parameter types. 318 <a href="/pkg/database/sql/#Out"><code>Out</code></a> should be used to return output parameters 319 when supported by the driver. 320 </p> 321 322 <p><!-- CL 39031 --> 323 <a href="/pkg/database/sql/#Rows.Scan"><code>Rows.Scan</code></a> can now scan user-defined string types. 324 Previously the package supported scanning into numeric types like <code>type Int int64</code>. It now also supports 325 scanning into string types like <code>type String string</code>. 326 </p> 327 328 <p><!-- CL 40694 --> 329 The new <a href="/pkg/database/sql/#DB.Conn"><code>DB.Conn</code></a> method returns the new 330 <a href="/pkg/database/sql/#Conn"><code>Conn</code></a> type representing an 331 exclusive connection to the database from the connection pool. All queries run on 332 a <a href="/pkg/database/sql/#Conn"><code>Conn</code></a> will use the same underlying 333 connection until <a href="/pkg/database/sql/#Conn.Close"><code>Conn.Close</code></a> is called 334 to return the connection to the connection pool. 335 </p> 336 337 </dl><!-- database/sql --> 338 339 <dl id="encoding/asn1"><dt><a href="/pkg/encoding/asn1/">encoding/asn1</a></dt> 340 <dd> 341 <p><!-- CL 38660 --> 342 The new 343 <a href="/pkg/encoding/asn1/#NullBytes"><code>NullBytes</code></a> 344 and 345 <a href="/pkg/encoding/asn1/#NullRawValue"><code>NullRawValue</code></a> 346 represent the <code>ASN.1 NULL</code> type. 347 </p> 348 349 </dl><!-- encoding/asn1 --> 350 351 <dl id="encoding/base32"><dt><a href="/pkg/encoding/base32/">encoding/base32</a></dt> 352 <dd> 353 <p><!-- CL 38634 --> 354 The new <a href="/pkg/encoding/base32/#Encoding.WithPadding">Encoding.WithPadding</a> 355 method adds support for custom padding characters and disabling padding. 356 </p> 357 358 </dl><!-- encoding/base32 --> 359 360 <dl id="fmt"><dt><a href="/pkg/fmt/">fmt</a></dt> 361 <dd> 362 <p><!-- CL 37051 --> 363 The sharp flag ('<code>#</code>') is now supported when printing 364 floating point and complex numbers. It will always print a 365 decimal point 366 for <code>%e</code>, <code>%E</code>, <code>%f</code>, <code>%F</code>, <code>%g</code> 367 and <code>%G</code>; it will not remove trailing zeros 368 for <code>%g</code> and <code>%G</code>. 369 </p> 370 371 </dl><!-- fmt --> 372 373 <dl id="hash/fnv"><dt><a href="/pkg/hash/fnv/">hash/fnv</a></dt> 374 <dd> 375 <p><!-- CL 38356 --> 376 The package now includes 128-bit FNV-1 and FNV-1a hash support with 377 <a href="/pkg/hash/fnv/#New128"><code>New128</code></a> and 378 <a href="/pkg/hash/fnv/#New128a"><code>New128a</code></a>, respectively. 379 </p> 380 381 </dl><!-- hash/fnv --> 382 383 <dl id="html/template"><dt><a href="/pkg/html/template/">html/template</a></dt> 384 <dd> 385 <p><!-- CL 37880, CL 40936 --> 386 The package now reports an error if a predefined escaper (one of 387 "html", "urlquery" and "js") is found in a pipeline and its 388 rewriting by the contextual auto-escaper could potentially lead 389 to security or correctness issues. 390 </p> 391 392 </dl><!-- html/template --> 393 394 <dl id="image"><dt><a href="/pkg/image/">image</a></dt> 395 <dd> 396 <p><!-- CL 36734 --> 397 The <a href="/pkg/image/#Rectangle.Intersect"><code>Rectangle.Intersect</code></a> 398 method now returns a zero <code>Rectangle</code> when called on 399 adjacent but non-overlapping rectangles, as documented. In 400 earlier releases it would incorrectly return an empty but 401 non-zero <code>Rectangle</code>. 402 </p> 403 404 </dl><!-- image --> 405 406 <dl id="image/color"><dt><a href="/pkg/image/color/">image/color</a></dt> 407 <dd> 408 <p><!-- CL 36732 --> 409 The YCbCr to RGBA conversion formula has been tweaked to ensure 410 that rounding adjustments span the complete [0, 0xffff] RGBA 411 range. 412 </p> 413 414 </dl><!-- image/color --> 415 416 <dl id="image/png"><dt><a href="/pkg/image/png/">image/png</a></dt> 417 <dd> 418 <p><!-- CL 34150 --> 419 The new <a href="/pkg/image/png/#Encoder.BufferPool"><code>Encoder.BufferPool</code></a> 420 field allows specifying an <a href="/pkg/image/png/#EncoderBufferPool"><code>EncoderBufferPool</code></a>, 421 that will be used by the encoder to get temporary <code>EncoderBuffer</code> 422 buffers when encoding a PNG image. 423 424 The use of a <code>BufferPool</code> reduces the number of 425 memory allocations performed while encoding multiple images. 426 </p> 427 428 <p><!-- CL 38271 --> 429 The package now supports the decoding of transparent 8-bit 430 grayscale ("Gray8") images. 431 </p> 432 433 </dl><!-- image/png --> 434 435 <dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt> 436 <dd> 437 <p><!-- CL 36487 --> 438 The new 439 <a href="/pkg/math/big/#Int.IsInt64"><code>IsInt64</code></a> 440 and 441 <a href="/pkg/math/big/#Int.IsUint64"><code>IsUint64</code></a> 442 methods report whether an <code>Int</code> 443 may be represented as an <code>int64</code> or <code>uint64</code> 444 value. 445 </p> 446 447 </dl><!-- math/big --> 448 449 <dl id="mime/multipart"><dt><a href="/pkg/mime/multipart/">mime/multipart</a></dt> 450 <dd> 451 <p><!-- CL 39223 --> 452 The new 453 <a href="/pkg/mime/multipart/#FileHeader.Size"><code>FileHeader.Size</code></a> 454 field describes the size of a file in a multipart message. 455 </p> 456 457 </dl><!-- mime/multipart --> 458 459 <dl id="net"><dt><a href="/pkg/net/">net</a></dt> 460 <dd> 461 <p><!-- CL 32572 --> 462 TODO: <a href="https://golang.org/cl/32572">https://golang.org/cl/32572</a>: add Resolver.StrictErrors 463 </p> 464 465 <p><!-- CL 37260 --> 466 TODO: <a href="https://golang.org/cl/37260">https://golang.org/cl/37260</a>: allow Resolver to use a custom dialer 467 </p> 468 469 <p><!-- CL 37402 --> 470 TODO: <a href="https://golang.org/cl/37402">https://golang.org/cl/37402</a>: implement deadline functionality on Pipe 471 </p> 472 473 <p><!-- CL 40510 --> 474 TODO: <a href="https://golang.org/cl/40510">https://golang.org/cl/40510</a>: don't enclose non-literal IPv6 addresses in square brackets 475 </p> 476 477 <p><!-- CL 40512 --> 478 TODO: <a href="https://golang.org/cl/40512">https://golang.org/cl/40512</a>: validate network in Dial{,IP} and Listen{Packet,IP} for IP networks 479 </p> 480 481 <p><!-- CL 37913 --> 482 The new methods 483 <a href="/pkg/net/#TCPConn.SyscallConn"><code>TCPConn.SyscallConn</code></a>, 484 <a href="/pkg/net/#IPConn.SyscallConn"><code>IPConn.SyscallConn</code></a>, 485 <a href="/pkg/net/#UDPConn.SyscallConn"><code>UDPConn.SyscallConn</code></a>, 486 and 487 <a href="/pkg/net/#UnixConn.SyscallConn"><code>UnixConn.SyscallConn</code></a> 488 provide access to the connections' underlying file descriptors. 489 </p> 490 491 </dl><!-- net --> 492 493 <dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt> 494 <dd> 495 496 <p>Server changes:</p> 497 <ul> 498 <li><!-- CL 38194 --> 499 <a href="/pkg/net/http/#ServeMux"><code>ServeMux</code></a> now ignores ports in the host 500 header when matching handlers. The host is matched unmodified for <code>CONNECT</code> requests. 501 </li> 502 503 <li><!-- CL 34727 --> 504 <a href="/pkg/net/http/#Server.WriteTimeout"><code>Server.WriteTimeout</code></a> 505 now applies to HTTP/2 connections and is enforced per-stream. 506 </li> 507 508 <li><!-- CL 43231 --> 509 HTTP/2 now uses the priority write scheduler by default. 510 Frames are scheduled by following HTTP/2 priorities as described in 511 <a href="https://tools.ietf.org/html/rfc7540#section-5.3">RFC 7540 Section 5.3</a>. 512 </li> 513 </ul> 514 515 <p>Client & Transport changes:</p> 516 <ul> 517 <li><!-- CL 35488 --> 518 The <a href="/pkg/net/http/#Transport"><code>Transport</code></a> 519 now supports making requests via SOCKS5 proxy when the URL returned by 520 <a href="/net/http/#Transport.Proxy"><code>Transport.Proxy</code></a> 521 has the scheme <code>socks5</code>. 522 </li> 523 </ul> 524 525 </dl><!-- net/http --> 526 527 <dl id="net/http/fcgi"><dt><a href="/pkg/net/http/fcgi/">net/http/fcgi</a></dt> 528 <dd> 529 <p><!-- CL 40012 --> 530 The new 531 <a href="/pkg/net/http/fcgi/#ProcessEnv"><code>ProcessEnv</code></a> 532 function returns FastCGI environment variables associated with an HTTP request 533 for which there are no appropriate 534 <a href="/pkg/net/http/#Request"><code>http.Request</code></a> 535 fields, such as <code>REMOTE_USER</code>. 536 </p> 537 538 </dl><!-- net/http/fcgi --> 539 540 <dl id="net/http/httptest"><dt><a href="/pkg/net/http/httptest/">net/http/httptest</a></dt> 541 <dd> 542 <p><!-- CL 34639 --> 543 The new 544 <a href="/pkg/net/http/httptest/#Server.Client"><code>Server.Client</code></a> 545 method returns an HTTP client configured for making requests to the test server. 546 </p> 547 548 <p> 549 The new 550 <a href="/pkg/net/http/httptest/#Server.Certificate"><code>Server.Certificate</code></a> 551 method returns the test server's TLS certificate, if any. 552 </p> 553 554 </dl><!-- net/http/httptest --> 555 556 <dl id="net/rpc"><dt><a href="/pkg/net/rpc/">net/rpc</a></dt> 557 <dd> 558 <p><!-- CL 38474 --> 559 TODO: <a href="https://golang.org/cl/38474">https://golang.org/cl/38474</a>: Create empty maps and slices as return type 560 </p> 561 562 </dl><!-- net/rpc --> 563 564 <dl id="os"><dt><a href="/pkg/os/">os</a></dt> 565 <dd> 566 <p><!-- CL 37915 --> 567 TODO: <a href="https://golang.org/cl/37915">https://golang.org/cl/37915</a>: parse command line without shell32.dll 568 </p> 569 570 <p><!-- CL 41830 --> 571 TODO: <a href="https://golang.org/cl/41830">https://golang.org/cl/41830</a>: do not report ModeDir for symlinks on windows 572 </p> 573 574 </dl><!-- os --> 575 576 <dl id="os/exec"><dt><a href="/pkg/os/exec/">os/exec</a></dt> 577 <dd> 578 <p><!-- CL 37586 --> 579 The <code>os/exec</code> package now prevents child processes from being created with 580 any duplicate environment variables. 581 If <a href="/pkg/os/exec/#Cmd.Env"><code>Cmd.Env</code></a> 582 contains duplicate environment keys, only the last 583 value in the slice for each duplicate key is used. 584 </p> 585 586 </dl><!-- os/exec --> 587 588 <dl id="os/user"><dt><a href="/pkg/os/user/">os/user</a></dt> 589 <dd> 590 <p><!-- CL 37664 --> 591 <a href="/pkg/os/user/#Lookup"><code>Lookup</code></a> and 592 <a href="/pkg/os/user/#LookupId"><code>LookupId</code></a> now 593 work on Unix systems when <code>CGO_ENABLED=0</code> by reading 594 the <code>/etc/passwd</code> file. 595 </p> 596 597 <p><!-- CL 33713 --> 598 <a href="/pkg/os/user/#LookupGroup"><code>LookupGroup</code></a> and 599 <a href="/pkg/os/user/#LookupGroupId"><code>LookupGroupId</code></a> now 600 work on Unix systems when <code>CGO_ENABLED=0</code> by reading 601 the <code>/etc/group</code> file. 602 </p> 603 604 </dl><!-- os/user --> 605 606 <dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt> 607 <dd> 608 <p><!-- CL 38335 --> 609 The new 610 <a href="/pkg/reflect/#MakeMapWithSize"><code>MakeMapWithSize</code></a> 611 function creates a map with a capacity hint. 612 </p> 613 614 </dl><!-- reflect --> 615 616 <dl id="runtime"><dt><a href="/pkg/runtime/">runtime</a></dt> 617 <dd> 618 <p><!-- CL 37233, CL 37726 --> 619 Tracebacks generated by the runtime and recorded in profiles are 620 now accurate in the presence of inlining. 621 To retrieve tracebacks programmatically, applications should use 622 <a href="/pkg/runtime/#CallersFrames"><code>runtime.CallersFrames</code></a> 623 rather than directly iterating over the results of 624 <a href="/pkg/runtime/#Callers"><code>runtime.Callers</code></a>. 625 </p> 626 627 <p><!-- CL 38403 --> 628 On Windows, Go no longer forces the system timer to run at high 629 resolution when the program is idle. 630 This should reduce the impact of Go programs on battery life. 631 </p> 632 633 <p><!-- CL 29341 --> 634 On FreeBSD, <code>GOMAXPROCS</code> and 635 <a href="/pkg/runtime/#NumCPU"><code>runtime.NumCPU</code></a> 636 are now based on the process' CPU mask, rather than the total 637 number of CPUs. 638 </p> 639 640 <p><!-- CL 43641 --> 641 The runtime has preliminary support for Android O. 642 </p> 643 644 </dl><!-- runtime --> 645 646 <dl id="runtime/pprof"><dt><a href="/pkg/runtime/pprof/">runtime/pprof</a></dt> 647 <dd> 648 <p><!-- CL 34198 --> 649 TODO: <a href="https://golang.org/cl/34198">https://golang.org/cl/34198</a>: add definitions of profile label types 650 </p> 651 652 </dl><!-- runtime/pprof --> 653 654 <dl id="runtime/trace"><dt><a href="/pkg/runtime/trace/">runtime/trace</a></dt> 655 <dd> 656 <p><!-- CL 36015 --> 657 The execution trace now displays mark assist events, which 658 indicate when an application goroutine is forced to assist 659 garbage collection because it is allocating too quickly. 660 </p> 661 662 <p><!-- CL 40810 --> 663 "Sweep" events now encompass the entire process of finding free 664 space for an allocation, rather than recording each individual 665 span that is swept. 666 This reduces allocation latency when tracing allocation-heavy 667 programs. 668 The sweep event shows how many bytes were swept and how many 669 were reclaimed. 670 </p> 671 672 </dl><!-- runtime/trace --> 673 674 <dl id="sync"><dt><a href="/pkg/sync/">sync</a></dt> 675 <dd> 676 <p><!-- CL 34310 --> 677 <a href="/pkg/sync/#Mutex"><code>Mutex</code></a> is now more fair. 678 </p> 679 680 </dl><!-- sync --> 681 682 <dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt> 683 <dd> 684 <p><!-- CL 36697 --> 685 The new field 686 <a href="/pkg/syscall/#Credential.NoSetGroups"><code>Credential.NoSetGroups</code></a> 687 controls whether Unix systems make a <code>setgroups</code> system call 688 to set supplementary groups when starting a new process. 689 </p> 690 691 <p><!-- CL 37439 --> 692 On 64-bit x86 Linux, process creation latency has been optimized with 693 use of <code>CLONE_VFORK</code> and <code>CLONE_VM</code>. 694 </p> 695 696 <p><!-- CL 37913 --> 697 The new 698 <a href="/pkg/syscall/#Conn"><code>Conn</code></a> 699 interface describes some types in the 700 <a href="/pkg/net/"><code>net</code></a> 701 package that can provide access to their underlying file descriptor 702 using the new 703 <a href="/pkg/syscall/#RawConn"><code>RawConn</code></a> 704 interface. 705 </p> 706 707 </dl><!-- syscall --> 708 709 710 <dl id="testing/quick"><dt><a href="/pkg/testing/quick/">testing/quick</a></dt> 711 <dd> 712 <p><!-- CL 39152 --> 713 The package now chooses values in the full range when 714 generating <code>int64</code> and <code>uint64</code> random 715 numbers; in earlier releases generated values were always 716 limited to the [-2<sup>62</sup>, 2<sup>62</sup>) range. 717 </p> 718 719 </dl><!-- testing/quick --> 720 721 <dl id="text/template"><dt><a href="/pkg/text/template/">text/template</a></dt> 722 <dd> 723 <p><!-- CL 38420 --> 724 The handling of empty blocks, which was broken by a Go 1.8 725 change that made the result dependent on the order of templates, 726 has been fixed, restoring the old Go 1.7 behavior. 727 </p> 728 729 </dl><!-- text/template --> 730 731 <dl id="time"><dt><a href="/pkg/time/">time</a></dt> 732 <dd> 733 <p><!-- CL 36615 --> 734 The new methods 735 <a href="/pkg/time/#Duration.Round"><code>Duration.Round</code></a> 736 and 737 <a href="/pkg/time/#Duration.Truncate"><code>Duration.Truncate</code></a> 738 handle rounding durations away from and towards zero, respectively. 739 </p> 740 741 <p><!-- CL 35710 --> 742 Retrieving the time and sleeping now work correctly under Wine. 743 </p> 744 745 </dl><!-- time --> 746