1 <!--{ 2 "Title": "Go 1.5 Release Notes", 3 "Path": "/doc/go1.5", 4 "Template": true 5 }--> 6 7 8 <h2 id="introduction">Introduction to Go 1.5</h2> 9 10 <p> 11 The latest Go release, version 1.5, 12 is a significant release, including major architectural changes to the implementation. 13 Despite that, we expect almost all Go programs to continue to compile and run as before, 14 because the release still maintains the Go 1 <a href="/doc/go1compat.html">promise 15 of compatibility</a>. 16 </p> 17 18 <p> 19 The biggest developments in the implementation are: 20 </p> 21 22 <ul> 23 24 <li> 25 The compiler and runtime are now written entirely in Go (with a little assembler). 26 C is no longer involved in the implementation, and so the C compiler that was 27 once necessary for building the distribution is gone. 28 </li> 29 30 <li> 31 The garbage collector is now <a href="https://golang.org/s/go14gc">concurrent</a> and provides dramatically lower 32 pause times by running, when possible, in parallel with other goroutines. 33 </li> 34 35 <li> 36 By default, Go programs run with <code>GOMAXPROCS</code> set to the 37 number of cores available; in prior releases it defaulted to 1. 38 </li> 39 40 <li> 41 Support for <a href="https://golang.org/s/go14internal">internal packages</a> 42 is now provided for all repositories, not just the Go core. 43 </li> 44 45 <li> 46 The <code>go</code> command now provides <a href="https://golang.org/s/go15vendor">experimental 47 support</a> for "vendoring" external dependencies. 48 </li> 49 50 <li> 51 A new <code>go tool trace</code> command supports fine-grained 52 tracing of program execution. 53 </li> 54 55 <li> 56 A new <code>go doc</code> command (distinct from <code>godoc</code>) 57 is customized for command-line use. 58 </li> 59 60 </ul> 61 62 <p> 63 These and a number of other changes to the implementation and tools 64 are discussed below. 65 </p> 66 67 <p> 68 The release also contains one small language change involving map literals. 69 </p> 70 71 <p> 72 Finally, the timing of the <a href="https://golang.org/s/releasesched">release</a> 73 strays from the usual six-month interval, 74 both to provide more time to prepare this major release and to shift the schedule thereafter to 75 time the release dates more conveniently. 76 </p> 77 78 <h2 id="language">Changes to the language</h2> 79 80 <h3 id="map_literals">Map literals</h3> 81 82 <p> 83 Due to an oversight, the rule that allowed the element type to be elided from slice literals was not 84 applied to map keys. 85 This has been <a href="/cl/2591">corrected</a> in Go 1.5. 86 An example will make this clear. 87 As of Go 1.5, this map literal, 88 </p> 89 90 <pre> 91 m := map[Point]string{ 92 Point{29.935523, 52.891566}: "Persepolis", 93 Point{-25.352594, 131.034361}: "Uluru", 94 Point{37.422455, -122.084306}: "Googleplex", 95 } 96 </pre> 97 98 <p> 99 may be written as follows, without the <code>Point</code> type listed explicitly: 100 </p> 101 102 <pre> 103 m := map[Point]string{ 104 {29.935523, 52.891566}: "Persepolis", 105 {-25.352594, 131.034361}: "Uluru", 106 {37.422455, -122.084306}: "Googleplex", 107 } 108 </pre> 109 110 <h2 id="implementation">The Implementation</h2> 111 112 <h3 id="c">No more C</h3> 113 114 <p> 115 The compiler and runtime are now implemented in Go and assembler, without C. 116 The only C source left in the tree is related to testing or to <code>cgo</code>. 117 There was a C compiler in the tree in 1.4 and earlier. 118 It was used to build the runtime; a custom compiler was necessary in part to 119 guarantee the C code would work with the stack management of goroutines. 120 Since the runtime is in Go now, there is no need for this C compiler and it is gone. 121 Details of the process to eliminate C are discussed <a href="https://golang.org/s/go13compiler">elsewhere</a>. 122 </p> 123 124 <p> 125 The conversion from C was done with the help of custom tools created for the job. 126 Most important, the compiler was actually moved by automatic translation of 127 the C code into Go. 128 It is in effect the same program in a different language. 129 It is not a new implementation 130 of the compiler so we expect the process will not have introduced new compiler 131 bugs. 132 An overview of this process is available in the slides for 133 <a href="https://talks.golang.org/2015/gogo.slide">this presentation</a>. 134 </p> 135 136 <h3 id="compiler_and_tools">Compiler and tools</h3> 137 138 <p> 139 Independent of but encouraged by the move to Go, the names of the tools have changed. 140 The old names <code>6g</code>, <code>8g</code> and so on are gone; instead there 141 is just one binary, accessible as <code>go</code> <code>tool</code> <code>compile</code>, 142 that compiles Go source into binaries suitable for the architecture and operating system 143 specified by <code>$GOARCH</code> and <code>$GOOS</code>. 144 Similarly, there is now one linker (<code>go</code> <code>tool</code> <code>link</code>) 145 and one assembler (<code>go</code> <code>tool</code> <code>asm</code>). 146 The linker was translated automatically from the old C implementation, 147 but the assembler is a new native Go implementation discussed 148 in more detail below. 149 </p> 150 151 <p> 152 Similar to the drop of the names <code>6g</code>, <code>8g</code>, and so on, 153 the output of the compiler and assembler are now given a plain <code>.o</code> suffix 154 rather than <code>.8</code>, <code>.6</code>, etc. 155 </p> 156 157 158 <h3 id="gc">Garbage collector</h3> 159 160 <p> 161 The garbage collector has been re-engineered for 1.5 as part of the development 162 outlined in the <a href="https://golang.org/s/go14gc">design document</a>. 163 Expected latencies are much lower than with the collector 164 in prior releases, through a combination of advanced algorithms, 165 better <a href="https://golang.org/s/go15gcpacing">scheduling</a> of the collector, 166 and running more of the collection in parallel with the user program. 167 The "stop the world" phase of the collector 168 will almost always be under 10 milliseconds and usually much less. 169 </p> 170 171 <p> 172 For systems that benefit from low latency, such as user-responsive web sites, 173 the drop in expected latency with the new collector may be important. 174 </p> 175 176 <p> 177 Details of the new collector were presented in a 178 <a href="https://talks.golang.org/2015/go-gc.pdf">talk</a> at GopherCon 2015. 179 </p> 180 181 <h3 id="runtime">Runtime</h3> 182 183 <p> 184 In Go 1.5, the order in which goroutines are scheduled has been changed. 185 The properties of the scheduler were never defined by the language, 186 but programs that depend on the scheduling order may be broken 187 by this change. 188 We have seen a few (erroneous) programs affected by this change. 189 If you have programs that implicitly depend on the scheduling 190 order, you will need to update them. 191 </p> 192 193 <p> 194 Another potentially breaking change is that the runtime now 195 sets the default number of threads to run simultaneously, 196 defined by <code>GOMAXPROCS</code>, to the number 197 of cores available on the CPU. 198 In prior releases the default was 1. 199 Programs that do not expect to run with multiple cores may 200 break inadvertently. 201 They can be updated by removing the restriction or by setting 202 <code>GOMAXPROCS</code> explicitly. 203 For a more detailed discussion of this change, see 204 the <a href="https://golang.org/s/go15gomaxprocs">design document</a>. 205 </p> 206 207 <h3 id="build">Build</h3> 208 209 <p> 210 Now that the Go compiler and runtime are implemented in Go, a Go compiler 211 must be available to compile the distribution from source. 212 Thus, to build the Go core, a working Go distribution must already be in place. 213 (Go programmers who do not work on the core are unaffected by this change.) 214 Any Go 1.4 or later distribution (including <code>gccgo</code>) will serve. 215 For details, see the <a href="https://golang.org/s/go15bootstrap">design document</a>. 216 </p> 217 218 <h2 id="ports">Ports</h2> 219 220 <p> 221 Due mostly to the industry's move away from the 32-bit x86 architecture, 222 the set of binary downloads provided is reduced in 1.5. 223 A distribution for the OS X operating system is provided only for the 224 <code>amd64</code> architecture, not <code>386</code>. 225 Similarly, the ports for Snow Leopard (Apple OS X 10.6) still work but are no 226 longer released as a download or maintained since Apple no longer maintains that version 227 of the operating system. 228 Also, the <code>dragonfly/386</code> port is no longer supported at all 229 because DragonflyBSD itself no longer supports the 32-bit 386 architecture. 230 </p> 231 232 <p> 233 There are however several new ports available to be built from source. 234 These include <code>darwin/arm</code> and <code>darwin/arm64</code>. 235 The new port <code>linux/arm64</code> is mostly in place, but <code>cgo</code> 236 is only supported using external linking. 237 </p> 238 239 <p> 240 Also available as experiments are <code>ppc64</code> 241 and <code>ppc64le</code> (64-bit PowerPC, big- and little-endian). 242 Both these ports support <code>cgo</code> but 243 only with internal linking. 244 </p> 245 246 <p> 247 On FreeBSD, Go 1.5 requires FreeBSD 8-STABLE+ because of its new use of the <code>SYSCALL</code> instruction. 248 </p> 249 250 <p> 251 On NaCl, Go 1.5 requires SDK version pepper-41. Later pepper versions are not 252 compatible due to the removal of the sRPC subsystem from the NaCl runtime. 253 </p> 254 255 <p> 256 On Darwin, the use of the system X.509 certificate interface can be disabled 257 with the <code>ios</code> build tag. 258 </p> 259 260 <p> 261 The Solaris port now has full support for cgo and the packages 262 <a href="/pkg/net/"><code>net</code></a> and 263 <a href="/pkg/crypto/x509/"><code>crypto/x509</code></a>, 264 as well as a number of other fixes and improvements. 265 </p> 266 267 <h2 id="tools">Tools</h2> 268 269 <h3 id="translate">Translating</h3> 270 271 <p> 272 As part of the process to eliminate C from the tree, the compiler and 273 linker were translated from C to Go. 274 It was a genuine (machine assisted) translation, so the new programs are essentially 275 the old programs translated rather than new ones with new bugs. 276 We are confident the translation process has introduced few if any new bugs, 277 and in fact uncovered a number of previously unknown bugs, now fixed. 278 </p> 279 280 <p> 281 The assembler is a new program, however; it is described below. 282 </p> 283 284 <h3 id="rename">Renaming</h3> 285 286 <p> 287 The suites of programs that were the compilers (<code>6g</code>, <code>8g</code>, etc.), 288 the assemblers (<code>6a</code>, <code>8a</code>, etc.), 289 and the linkers (<code>6l</code>, <code>8l</code>, etc.) 290 have each been consolidated into a single tool that is configured 291 by the environment variables <code>GOOS</code> and <code>GOARCH</code>. 292 The old names are gone; the new tools are available through the <code>go</code> <code>tool</code> 293 mechanism as <code>go tool compile</code>, 294 <code>go tool asm</code>, 295 <code>and go tool link</code>. 296 Also, the file suffixes <code>.6</code>, <code>.8</code>, etc. for the 297 intermediate object files are also gone; now they are just plain <code>.o</code> files. 298 </p> 299 300 <p> 301 For example, to build and link a program on amd64 for Darwin 302 using the tools directly, rather than through <code>go build</code>, 303 one would run: 304 </p> 305 306 <pre> 307 $ export GOOS=darwin GOARCH=amd64 308 $ go tool compile program.go 309 $ go tool link program.o 310 </pre> 311 312 <h3 id="moving">Moving</h3> 313 314 <p> 315 Because the <a href="/pkg/go/types/"><code>go/types</code></a> package 316 has now moved into the main repository (see below), 317 the <a href="/cmd/vet"><code>vet</code></a> and 318 <a href="/cmd/cover"><code>cover</code></a> 319 tools have also been moved. 320 They are no longer maintained in the external <code>golang.org/x/tools</code> repository, 321 although (deprecated) source still resides there for compatibility with old releases. 322 </p> 323 324 <h3 id="compiler">Compiler</h3> 325 326 <p> 327 As described above, the compiler in Go 1.5 is a single Go program, 328 translated from the old C source, that replaces <code>6g</code>, <code>8g</code>, 329 and so on. 330 Its target is configured by the environment variables <code>GOOS</code> and <code>GOARCH</code>. 331 </p> 332 333 <p> 334 The 1.5 compiler is mostly equivalent to the old, 335 but some internal details have changed. 336 One significant change is that evaluation of constants now uses 337 the <a href="/pkg/math/big/"><code>math/big</code></a> package 338 rather than a custom (and less well tested) implementation of high precision 339 arithmetic. 340 We do not expect this to affect the results. 341 </p> 342 343 <p> 344 For the amd64 architecture only, the compiler has a new option, <code>-dynlink</code>, 345 that assists dynamic linking by supporting references to Go symbols 346 defined in external shared libraries. 347 </p> 348 349 <h3 id="assembler">Assembler</h3> 350 351 <p> 352 Like the compiler and linker, the assembler in Go 1.5 is a single program 353 that replaces the suite of assemblers (<code>6a</code>, 354 <code>8a</code>, etc.) and the environment variables 355 <code>GOARCH</code> and <code>GOOS</code> 356 configure the architecture and operating system. 357 Unlike the other programs, the assembler is a wholly new program 358 written in Go. 359 </p> 360 361 <p> 362 The new assembler is very nearly compatible with the previous 363 ones, but there are a few changes that may affect some 364 assembler source files. 365 See the updated <a href="/doc/asm">assembler guide</a> 366 for more specific information about these changes. In summary: 367 368 </p> 369 370 <p> 371 First, the expression evaluation used for constants is a little 372 different. 373 It now uses unsigned 64-bit arithmetic and the precedence 374 of operators (<code>+</code>, <code>-</code>, <code><<</code>, etc.) 375 comes from Go, not C. 376 We expect these changes to affect very few programs but 377 manual verification may be required. 378 </p> 379 380 <p> 381 Perhaps more important is that on machines where 382 <code>SP</code> or <code>PC</code> is only an alias 383 for a numbered register, 384 such as <code>R13</code> for the stack pointer and 385 <code>R15</code> for the hardware program counter 386 on ARM, 387 a reference to such a register that does not include a symbol 388 is now illegal. 389 For example, <code>SP</code> and <code>4(SP)</code> are 390 illegal but <code>sym+4(SP)</code> is fine. 391 On such machines, to refer to the hardware register use its 392 true <code>R</code> name. 393 </p> 394 395 <p> 396 One minor change is that some of the old assemblers 397 permitted the notation 398 </p> 399 400 <pre> 401 constant=value 402 </pre> 403 404 <p> 405 to define a named constant. 406 Since this is always possible to do with the traditional 407 C-like <code>#define</code> notation, which is still 408 supported (the assembler includes an implementation 409 of a simplified C preprocessor), the feature was removed. 410 </p> 411 412 <h3 id="link">Linker</h3> 413 414 <p> 415 The linker in Go 1.5 is now one Go program, 416 that replaces <code>6l</code>, <code>8l</code>, etc. 417 Its operating system and instruction set are specified 418 by the environment variables <code>GOOS</code> and <code>GOARCH</code>. 419 </p> 420 421 <p> 422 There are several other changes. 423 The most significant is the addition of a <code>-buildmode</code> option that 424 expands the style of linking; it now supports 425 situations such as building shared libraries and allowing other languages 426 to call into Go libraries. 427 Some of these were outlined in a <a href="https://golang.org/s/execmodes">design document</a>. 428 For a list of the available build modes and their use, run 429 </p> 430 431 <pre> 432 $ go help buildmode 433 </pre> 434 435 <p> 436 Another minor change is that the linker no longer records build time stamps in 437 the header of Windows executables. 438 Also, although this may be fixed, Windows cgo executables are missing some 439 DWARF information. 440 </p> 441 442 <p> 443 Finally, the <code>-X</code> flag, which takes two arguments, 444 as in 445 </p> 446 447 <pre> 448 -X importpath.name value 449 </pre> 450 451 <p> 452 now also accepts a more common Go flag style with a single argument 453 that is itself a <code>name=value</code> pair: 454 </p> 455 456 <pre> 457 -X importpath.name=value 458 </pre> 459 460 <p> 461 Although the old syntax still works, it is recommended that uses of this 462 flag in scripts and the like be updated to the new form. 463 </p> 464 465 <h3 id="go_command">Go command</h3> 466 467 <p> 468 The <a href="/cmd/go"><code>go</code></a> command's basic operation 469 is unchanged, but there are a number of changes worth noting. 470 </p> 471 472 <p> 473 The previous release introduced the idea of a directory internal to a package 474 being unimportable through the <code>go</code> command. 475 In 1.4, it was tested with the introduction of some internal elements 476 in the core repository. 477 As suggested in the <a href="https://golang.org/s/go14internal">design document</a>, 478 that change is now being made available to all repositories. 479 The rules are explained in the design document, but in summary any 480 package in or under a directory named <code>internal</code> may 481 be imported by packages rooted in the same subtree. 482 Existing packages with directory elements named <code>internal</code> may be 483 inadvertently broken by this change, which was why it was advertised 484 in the last release. 485 </p> 486 487 <p> 488 Another change in how packages are handled is the experimental 489 addition of support for "vendoring". 490 For details, see the documentation for the <a href="/cmd/go/#hdr-Vendor_Directories"><code>go</code> command</a> 491 and the <a href="https://golang.org/s/go15vendor">design document</a>. 492 </p> 493 494 <p> 495 There have also been several minor changes. 496 Read the <a href="/cmd/go">documentation</a> for full details. 497 </p> 498 499 <ul> 500 501 <li> 502 SWIG support has been updated such that 503 <code>.swig</code> and <code>.swigcxx</code> 504 now require SWIG 3.0.6 or later. 505 </li> 506 507 <li> 508 The <code>install</code> subcommand now removes the 509 binary created by the <code>build</code> subcommand 510 in the source directory, if present, 511 to avoid problems having two binaries present in the tree. 512 </li> 513 514 <li> 515 The <code>std</code> (standard library) wildcard package name 516 now excludes commands. 517 A new <code>cmd</code> wildcard covers the commands. 518 </li> 519 520 <li> 521 A new <code>-asmflags</code> build option 522 sets flags to pass to the assembler. 523 However, 524 the <code>-ccflags</code> build option has been dropped; 525 it was specific to the old, now deleted C compiler . 526 </li> 527 528 <li> 529 A new <code>-buildmode</code> build option 530 sets the build mode, described above. 531 </li> 532 533 <li> 534 A new <code>-pkgdir</code> build option 535 sets the location of installed package archives, 536 to help isolate custom builds. 537 </li> 538 539 <li> 540 A new <code>-toolexec</code> build option 541 allows substitution of a different command to invoke 542 the compiler and so on. 543 This acts as a custom replacement for <code>go tool</code>. 544 </li> 545 546 <li> 547 The <code>test</code> subcommand now has a <code>-count</code> 548 flag to specify how many times to run each test and benchmark. 549 The <a href="/pkg/testing/"><code>testing</code></a> package 550 does the work here, through by the <code>-test.count</code> flag. 551 </li> 552 553 <li> 554 The <code>generate</code> subcommand has a couple of new features. 555 The <code>-run</code> option specifies a regular expression to select which directives 556 to execute; this was proposed but never implemented in 1.4. 557 The executing pattern now has access to two new environment variables: 558 <code>$GOLINE</code> returns the source line number of the directive 559 and <code>$DOLLAR</code> expands to a dollar sign. 560 </li> 561 562 <li> 563 The <code>get</code> subcommand now has a <code>-insecure</code> 564 flag that must be enabled if fetching from an insecure repository, one that 565 does not encrypt the connection. 566 </li> 567 568 </ul> 569 570 <h3 id="vet_command">Go vet command</h3> 571 572 <p> 573 The <a href="/cmd/vet"><code>go tool vet</code></a> command now does 574 more thorough validation of struct tags. 575 </p> 576 577 <h3 id="trace_command">Trace command</h3> 578 579 <p> 580 A new tool is available for dynamic execution tracing of Go programs. 581 The usage is analogous to how the test coverage tool works. 582 Generation of traces is integrated into <code>go test</code>, 583 and then a separate execution of the tracing tool itself analyzes the results: 584 </p> 585 586 <pre> 587 $ go test -trace=trace.out path/to/package 588 $ go tool trace [flags] pkg.test trace.out 589 </pre> 590 591 <p> 592 The flags enable the output to be displayed in a browser window. 593 For details, run <code>go tool trace -help</code>. 594 There is also a description of the tracing facility in this 595 <a href="https://talks.golang.org/2015/dynamic-tools.slide">talk</a> 596 from GopherCon 2015. 597 </p> 598 599 <h3 id="doc_command">Go doc command</h3> 600 601 <p> 602 A few releases back, the <code>go doc</code> 603 command was deleted as being unnecessary. 604 One could always run "<code>godoc .</code>" instead. 605 The 1.5 release introduces a new <a href="/cmd/doc"><code>go doc</code></a> 606 command with a more convenient command-line interface than 607 <code>godoc</code>'s. 608 It is designed for command-line usage specifically, and provides a more 609 compact and focused presentation of the documentation for a package 610 or its elements, according to the invocation. 611 It also provides case-insensitive matching and 612 support for showing the documentation for unexported symbols. 613 For details run "<code>go help doc</code>". 614 </p> 615 616 <h3 id="cgo">Cgo</h3> 617 618 <p> 619 When parsing <code>#cgo</code> lines, 620 the invocation <code>${SRCDIR}</code> is now 621 expanded into the path to the source directory. 622 This allows options to be passed to the 623 compiler and linker that involve file paths relative to the 624 source code directory. Without the expansion the paths would be 625 invalid when the current working directory changes. 626 </p> 627 628 <p> 629 Solaris now has full cgo support. 630 </p> 631 632 <p> 633 On Windows, cgo now uses external linking by default. 634 </p> 635 636 <p> 637 When a C struct ends with a zero-sized field, but the struct itself is 638 not zero-sized, Go code can no longer refer to the zero-sized field. 639 Any such references will have to be rewritten. 640 </p> 641 642 <h2 id="performance">Performance</h2> 643 644 <p> 645 As always, the changes are so general and varied that precise statements 646 about performance are difficult to make. 647 The changes are even broader ranging than usual in this release, which 648 includes a new garbage collector and a conversion of the runtime to Go. 649 Some programs may run faster, some slower. 650 On average the programs in the Go 1 benchmark suite run a few percent faster in Go 1.5 651 than they did in Go 1.4, 652 while as mentioned above the garbage collector's pauses are 653 dramatically shorter, and almost always under 10 milliseconds. 654 </p> 655 656 <p> 657 Builds in Go 1.5 will be slower by a factor of about two. 658 The automatic translation of the compiler and linker from C to Go resulted in 659 unidiomatic Go code that performs poorly compared to well-written Go. 660 Analysis tools and refactoring helped to improve the code, but much remains to be done. 661 Further profiling and optimization will continue in Go 1.6 and future releases. 662 For more details, see these <a href="https://talks.golang.org/2015/gogo.slide">slides</a> 663 and associated <a href="https://www.youtube.com/watch?v=cF1zJYkBW4A">video</a>. 664 </p> 665 666 <h2 id="library">Core library</h2> 667 668 <h3 id="flag">Flag</h3> 669 670 <p> 671 The flag package's 672 <a href="/pkg/flag/#PrintDefaults"><code>PrintDefaults</code></a> 673 function, and method on <a href="/pkg/flag/#FlagSet"><code>FlagSet</code></a>, 674 have been modified to create nicer usage messages. 675 The format has been changed to be more human-friendly and in the usage 676 messages a word quoted with `backquotes` is taken to be the name of the 677 flag's operand to display in the usage message. 678 For instance, a flag created with the invocation, 679 </p> 680 681 <pre> 682 cpuFlag = flag.Int("cpu", 1, "run `N` processes in parallel") 683 </pre> 684 685 <p> 686 will show the help message, 687 </p> 688 689 <pre> 690 -cpu N 691 run N processes in parallel (default 1) 692 </pre> 693 694 <p> 695 Also, the default is now listed only when it is not the zero value for the type. 696 </p> 697 698 <h3 id="math_big">Floats in math/big</h3> 699 700 <p> 701 The <a href="/pkg/math/big/"><code>math/big</code></a> package 702 has a new, fundamental data type, 703 <a href="/pkg/math/big/#Float"><code>Float</code></a>, 704 which implements arbitrary-precision floating-point numbers. 705 A <code>Float</code> value is represented by a boolean sign, 706 a variable-length mantissa, and a 32-bit fixed-size signed exponent. 707 The precision of a <code>Float</code> (the mantissa size in bits) 708 can be specified explicitly or is otherwise determined by the first 709 operation that creates the value. 710 Once created, the size of a <code>Float</code>'s mantissa may be modified with the 711 <a href="/pkg/math/big/#Float.SetPrec"><code>SetPrec</code></a> method. 712 <code>Floats</code> support the concept of infinities, such as are created by 713 overflow, but values that would lead to the equivalent of IEEE 754 NaNs 714 trigger a panic. 715 <code>Float</code> operations support all IEEE-754 rounding modes. 716 When the precision is set to 24 (53) bits, 717 operations that stay within the range of normalized <code>float32</code> 718 (<code>float64</code>) 719 values produce the same results as the corresponding IEEE-754 720 arithmetic on those values. 721 </p> 722 723 <h3 id="go_types">Go types</h3> 724 725 <p> 726 The <a href="/pkg/go/types/"><code>go/types</code></a> package 727 up to now has been maintained in the <code>golang.org/x</code> 728 repository; as of Go 1.5 it has been relocated to the main repository. 729 The code at the old location is now deprecated. 730 There is also a modest API change in the package, discussed below. 731 </p> 732 733 <p> 734 Associated with this move, the 735 <a href="/pkg/go/constant/"><code>go/constant</code></a> 736 package also moved to the main repository; 737 it was <code>golang.org/x/tools/exact</code> before. 738 The <a href="/pkg/go/importer/"><code>go/importer</code></a> package 739 also moved to the main repository, 740 as well as some tools described above. 741 </p> 742 743 <h3 id="net">Net</h3> 744 745 <p> 746 The DNS resolver in the net package has almost always used <code>cgo</code> to access 747 the system interface. 748 A change in Go 1.5 means that on most Unix systems DNS resolution 749 will no longer require <code>cgo</code>, which simplifies execution 750 on those platforms. 751 Now, if the system's networking configuration permits, the native Go resolver 752 will suffice. 753 The important effect of this change is that each DNS resolution occupies a goroutine 754 rather than a thread, 755 so a program with multiple outstanding DNS requests will consume fewer operating 756 system resources. 757 </p> 758 759 <p> 760 The decision of how to run the resolver applies at run time, not build time. 761 The <code>netgo</code> build tag that has been used to enforce the use 762 of the Go resolver is no longer necessary, although it still works. 763 A new <code>netcgo</code> build tag forces the use of the <code>cgo</code> resolver at 764 build time. 765 To force <code>cgo</code> resolution at run time set 766 <code>GODEBUG=netdns=cgo</code> in the environment. 767 More debug options are documented <a href="https://golang.org/cl/11584">here</a>. 768 </p> 769 770 <p> 771 This change applies to Unix systems only. 772 Windows, Mac OS X, and Plan 9 systems behave as before. 773 </p> 774 775 <h3 id="reflect">Reflect</h3> 776 777 <p> 778 The <a href="/pkg/reflect/"><code>reflect</code></a> package 779 has two new functions: <a href="/pkg/reflect/#ArrayOf"><code>ArrayOf</code></a> 780 and <a href="/pkg/reflect/#FuncOf"><code>FuncOf</code></a>. 781 These functions, analogous to the extant 782 <a href="/pkg/reflect/#SliceOf"><code>SliceOf</code></a> function, 783 create new types at runtime to describe arrays and functions. 784 </p> 785 786 <h3 id="hardening">Hardening</h3> 787 788 <p> 789 Several dozen bugs were found in the standard library 790 through randomized testing with the 791 <a href="https://github.com/dvyukov/go-fuzz"><code>go-fuzz</code></a> tool. 792 Bugs were fixed in the 793 <a href="/pkg/archive/tar/"><code>archive/tar</code></a>, 794 <a href="/pkg/archive/zip/"><code>archive/zip</code></a>, 795 <a href="/pkg/compress/flate/"><code>compress/flate</code></a>, 796 <a href="/pkg/encoding/gob/"><code>encoding/gob</code></a>, 797 <a href="/pkg/fmt/"><code>fmt</code></a>, 798 <a href="/pkg/html/template/"><code>html/template</code></a>, 799 <a href="/pkg/image/gif/"><code>image/gif</code></a>, 800 <a href="/pkg/image/jpeg/"><code>image/jpeg</code></a>, 801 <a href="/pkg/image/png/"><code>image/png</code></a>, and 802 <a href="/pkg/text/template/"><code>text/template</code></a>, 803 packages. 804 The fixes harden the implementation against incorrect and malicious inputs. 805 </p> 806 807 <h3 id="minor_library_changes">Minor changes to the library</h3> 808 809 <ul> 810 811 <li> 812 The <a href="/pkg/archive/zip/"><code>archive/zip</code></a> package's 813 <a href="/pkg/archive/zip/#Writer"><code>Writer</code></a> type now has a 814 <a href="/pkg/archive/zip/#Writer.SetOffset"><code>SetOffset</code></a> 815 method to specify the location within the output stream at which to write the archive. 816 </li> 817 818 <li> 819 The <a href="/pkg/bufio/#Reader"><code>Reader</code></a> in the 820 <a href="/pkg/bufio/"><code>bufio</code></a> package now has a 821 <a href="/pkg/bufio/#Reader.Discard"><code>Discard</code></a> 822 method to discard data from the input. 823 </li> 824 825 <li> 826 In the <a href="/pkg/bytes/"><code>bytes</code></a> package, 827 the <a href="/pkg/bytes/#Buffer"><code>Buffer</code></a> type 828 now has a <a href="/pkg/bytes/#Buffer.Cap"><code>Cap</code></a> method 829 that reports the number of bytes allocated within the buffer. 830 Similarly, in both the <a href="/pkg/bytes/"><code>bytes</code></a> 831 and <a href="/pkg/strings/"><code>strings</code></a> packages, 832 the <a href="/pkg/bytes/#Reader"><code>Reader</code></a> 833 type now has a <a href="/pkg/bytes/#Reader.Size"><code>Size</code></a> 834 method that reports the original length of the underlying slice or string. 835 </li> 836 837 <li> 838 Both the <a href="/pkg/bytes/"><code>bytes</code></a> and 839 <a href="/pkg/strings/"><code>strings</code></a> packages 840 also now have a <a href="/pkg/bytes/#LastIndexByte"><code>LastIndexByte</code></a> 841 function that locates the rightmost byte with that value in the argument. 842 </li> 843 844 <li> 845 The <a href="/pkg/crypto/"><code>crypto</code></a> package 846 has a new interface, <a href="/pkg/crypto/#Decrypter"><code>Decrypter</code></a>, 847 that abstracts the behavior of a private key used in asymmetric decryption. 848 </li> 849 850 <li> 851 In the <a href="/pkg/crypto/cipher/"><code>crypto/cipher</code></a> package, 852 the documentation for the <a href="/pkg/crypto/cipher/#Stream"><code>Stream</code></a> 853 interface has been clarified regarding the behavior when the source and destination are 854 different lengths. 855 If the destination is shorter than the source, the method will panic. 856 This is not a change in the implementation, only the documentation. 857 </li> 858 859 <li> 860 Also in the <a href="/pkg/crypto/cipher/"><code>crypto/cipher</code></a> package, 861 there is now support for nonce lengths other than 96 bytes in AES's Galois/Counter mode (GCM), 862 which some protocols require. 863 </li> 864 865 <li> 866 In the <a href="/pkg/crypto/elliptic/"><code>crypto/elliptic</code></a> package, 867 there is now a <code>Name</code> field in the 868 <a href="/pkg/crypto/elliptic/#CurveParams"><code>CurveParams</code></a> struct, 869 and the curves implemented in the package have been given names. 870 These names provide a safer way to select a curve, as opposed to 871 selecting its bit size, for cryptographic systems that are curve-dependent. 872 </li> 873 874 <li> 875 Also in the <a href="/pkg/crypto/elliptic/"><code>crypto/elliptic</code></a> package, 876 the <a href="/pkg/crypto/elliptic/#Unmarshal"><code>Unmarshal</code></a> function 877 now verifies that the point is actually on the curve. 878 (If it is not, the function returns nils). 879 This change guards against certain attacks. 880 </li> 881 882 <li> 883 The <a href="/pkg/crypto/sha512/"><code>crypto/sha512</code></a> 884 package now has support for the two truncated versions of 885 the SHA-512 hash algorithm, SHA-512/224 and SHA-512/256. 886 </li> 887 888 <li> 889 The <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package 890 minimum protocol version now defaults to TLS 1.0. 891 The old default, SSLv3, is still available through <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> if needed. 892 </li> 893 894 <li> 895 The <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package 896 now supports Signed Certificate Timestamps (SCTs) as specified in RFC 6962. 897 The server serves them if they are listed in the 898 <a href="/pkg/crypto/tls/#Certificate"><code>Certificate</code></a> struct, 899 and the client requests them and exposes them, if present, 900 in its <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a> struct. 901 902 <li> 903 The stapled OCSP response to a <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> client connection, 904 previously only available via the 905 <a href="/pkg/crypto/tls/#Conn.OCSPResponse"><code>OCSPResponse</code></a> method, 906 is now exposed in the <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a> struct. 907 </li> 908 909 <li> 910 The <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> server implementation 911 will now always call the 912 <code>GetCertificate</code> function in 913 the <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> struct 914 to select a certificate for the connection when none is supplied. 915 </li> 916 917 <li> 918 Finally, the session ticket keys in the 919 <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package 920 can now be changed while the server is running. 921 This is done through the new 922 <a href="/pkg/crypto/tls/#Config.SetSessionTicketKeys"><code>SetSessionTicketKeys</code></a> 923 method of the 924 <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> type. 925 </li> 926 927 <li> 928 In the <a href="/pkg/crypto/x509/"><code>crypto/x509</code></a> package, 929 wildcards are now accepted only in the leftmost label as defined in 930 <a href="https://tools.ietf.org/html/rfc6125#section-6.4.3">the specification</a>. 931 </li> 932 933 <li> 934 Also in the <a href="/pkg/crypto/x509/"><code>crypto/x509</code></a> package, 935 the handling of unknown critical extensions has been changed. 936 They used to cause parse errors but now they are parsed and caused errors only 937 in <a href="/pkg/crypto/x509/#Certificate.Verify"><code>Verify</code></a>. 938 The new field <code>UnhandledCriticalExtensions</code> of 939 <a href="/pkg/crypto/x509/#Certificate"><code>Certificate</code></a> records these extensions. 940 </li> 941 942 <li> 943 The <a href="/pkg/database/sql/#DB"><code>DB</code></a> type of the 944 <a href="/pkg/database/sql/"><code>database/sql</code></a> package 945 now has a <a href="/pkg/database/sql/#DB.Stats"><code>Stats</code></a> method 946 to retrieve database statistics. 947 </li> 948 949 <li> 950 The <a href="/pkg/debug/dwarf/"><code>debug/dwarf</code></a> 951 package has extensive additions to better support DWARF version 4. 952 See for example the definition of the new type 953 <a href="/pkg/debug/dwarf/#Class"><code>Class</code></a>. 954 </li> 955 956 <li> 957 The <a href="/pkg/debug/dwarf/"><code>debug/dwarf</code></a> package 958 also now supports decoding of DWARF line tables. 959 </li> 960 961 <li> 962 The <a href="/pkg/debug/elf/"><code>debug/elf</code></a> 963 package now has support for the 64-bit PowerPC architecture. 964 </li> 965 966 <li> 967 The <a href="/pkg/encoding/base64/"><code>encoding/base64</code></a> package 968 now supports unpadded encodings through two new encoding variables, 969 <a href="/pkg/encoding/base64/#RawStdEncoding"><code>RawStdEncoding</code></a> and 970 <a href="/pkg/encoding/base64/#RawURLEncoding"><code>RawURLEncoding</code></a>. 971 </li> 972 973 <li> 974 The <a href="/pkg/encoding/json/"><code>encoding/json</code></a> package 975 now returns an <a href="/pkg/encoding/json/#UnmarshalTypeError"><code>UnmarshalTypeError</code></a> 976 if a JSON value is not appropriate for the target variable or component 977 to which it is being unmarshaled. 978 </li> 979 980 <li> 981 The <code>encoding/json</code>'s 982 <a href="/pkg/encoding/json/#Decoder"><code>Decoder</code></a> 983 type has a new method that provides a streaming interface for decoding 984 a JSON document: 985 <a href="/pkg/encoding/json/#Decoder.Token"><code>Token</code></a>. 986 It also interoperates with the existing functionality of <code>Decode</code>, 987 which will continue a decode operation already started with <code>Decoder.Token</code>. 988 </li> 989 990 <li> 991 The <a href="/pkg/flag/"><code>flag</code></a> package 992 has a new function, <a href="/pkg/flag/#UnquoteUsage"><code>UnquoteUsage</code></a>, 993 to assist in the creation of usage messages using the new convention 994 described above. 995 </li> 996 997 <li> 998 In the <a href="/pkg/fmt/"><code>fmt</code></a> package, 999 a value of type <a href="/pkg/reflect/#Value"><code>Value</code></a> now 1000 prints what it holds, rather than use the <code>reflect.Value</code>'s <code>Stringer</code> 1001 method, which produces things like <code><int Value></code>. 1002 </li> 1003 1004 <li> 1005 The <a href="/pkg/ast/#EmptyStmt"><code>EmptyStmt</code></a> type 1006 in the <a href="/pkg/go/ast/"><code>go/ast</code></a> package now 1007 has a boolean <code>Implicit</code> field that records whether the 1008 semicolon was implicitly added or was present in the source. 1009 </li> 1010 1011 <li> 1012 For forward compatibility the <a href="/pkg/go/build/"><code>go/build</code></a> package 1013 reserves <code>GOARCH</code> values for a number of architectures that Go might support one day. 1014 This is not a promise that it will. 1015 Also, the <a href="/pkg/go/build/#Package"><code>Package</code></a> struct 1016 now has a <code>PkgTargetRoot</code> field that stores the 1017 architecture-dependent root directory in which to install, if known. 1018 </li> 1019 1020 <li> 1021 The (newly migrated) <a href="/pkg/go/types/"><code>go/types</code></a> 1022 package allows one to control the prefix attached to package-level names using 1023 the new <a href="/pkg/go/types/#Qualifier"><code>Qualifier</code></a> 1024 function type as an argument to several functions. This is an API change for 1025 the package, but since it is new to the core, it is not breaking the Go 1 compatibility 1026 rules since code that uses the package must explicitly ask for it at its new location. 1027 To update, run 1028 <a href="https://golang.org/cmd/go/#hdr-Run_go_tool_fix_on_packages"><code>go fix</code></a> on your package. 1029 </li> 1030 1031 <li> 1032 In the <a href="/pkg/image/"><code>image</code></a> package, 1033 the <a href="/pkg/image/#Rectangle"><code>Rectangle</code></a> type 1034 now implements the <a href="/pkg/image/#Image"><code>Image</code></a> interface, 1035 so a <code>Rectangle</code> can serve as a mask when drawing. 1036 </li> 1037 1038 <li> 1039 Also in the <a href="/pkg/image/"><code>image</code></a> package, 1040 to assist in the handling of some JPEG images, 1041 there is now support for 4:1:1 and 4:1:0 YCbCr subsampling and basic 1042 CMYK support, represented by the new <code>image.CMYK</code> struct. 1043 </li> 1044 1045 <li> 1046 The <a href="/pkg/image/color/"><code>image/color</code></a> package 1047 adds basic CMYK support, through the new 1048 <a href="/pkg/image/color/#CMYK"><code>CMYK</code></a> struct, 1049 the <a href="/pkg/image/color/#CMYKModel"><code>CMYKModel</code></a> color model, and the 1050 <a href="/pkg/image/color/#CMYKToRGB"><code>CMYKToRGB</code></a> function, as 1051 needed by some JPEG images. 1052 </li> 1053 1054 <li> 1055 Also in the <a href="/pkg/image/color/"><code>image/color</code></a> package, 1056 the conversion of a <a href="/pkg/image/color/#YCbCr"><code>YCbCr</code></a> 1057 value to <code>RGBA</code> has become more precise. 1058 Previously, the low 8 bits were just an echo of the high 8 bits; 1059 now they contain more accurate information. 1060 Because of the echo property of the old code, the operation 1061 <code>uint8(r)</code> to extract an 8-bit red value worked, but is incorrect. 1062 In Go 1.5, that operation may yield a different value. 1063 The correct code is, and always was, to select the high 8 bits: 1064 <code>uint8(r>>8)</code>. 1065 Incidentally, the <code>image/draw</code> package 1066 provides better support for such conversions; see 1067 <a href="https://blog.golang.org/go-imagedraw-package">this blog post</a> 1068 for more information. 1069 </li> 1070 1071 <li> 1072 Finally, as of Go 1.5 the closest match check in 1073 <a href="/pkg/image/color/#Palette.Index"><code>Index</code></a> 1074 now honors the alpha channel. 1075 </li> 1076 1077 <li> 1078 The <a href="/pkg/image/gif/"><code>image/gif</code></a> package 1079 includes a couple of generalizations. 1080 A multiple-frame GIF file can now have an overall bounds different 1081 from all the contained single frames' bounds. 1082 Also, the <a href="/pkg/image/gif/#GIF"><code>GIF</code></a> struct 1083 now has a <code>Disposal</code> field 1084 that specifies the disposal method for each frame. 1085 </li> 1086 1087 <li> 1088 The <a href="/pkg/io/"><code>io</code></a> package 1089 adds a <a href="/pkg/io/#CopyBuffer"><code>CopyBuffer</code></a> function 1090 that is like <a href="/pkg/io/#Copy"><code>Copy</code></a> but 1091 uses a caller-provided buffer, permitting control of allocation and buffer size. 1092 </li> 1093 1094 <li> 1095 The <a href="/pkg/log/"><code>log</code></a> package 1096 has a new <a href="/pkg/log/#LUTC"><code>LUTC</code></a> flag 1097 that causes time stamps to be printed in the UTC time zone. 1098 It also adds a <a href="/pkg/log/#Logger.SetOutput"><code>SetOutput</code></a> method 1099 for user-created loggers. 1100 </li> 1101 1102 <li> 1103 In Go 1.4, <a href="/pkg/math/#Max"><code>Max</code></a> was not detecting all possible NaN bit patterns. 1104 This is fixed in Go 1.5, so programs that use <code>math.Max</code> on data including NaNs may behave differently, 1105 but now correctly according to the IEEE754 definition of NaNs. 1106 </li> 1107 1108 <li> 1109 The <a href="/pkg/math/big/"><code>math/big</code></a> package 1110 adds a new <a href="/pkg/math/big/#Jacobi"><code>Jacobi</code></a> 1111 function for integers and a new 1112 <a href="/pkg/math/big/#Int.ModSqrt"><code>ModSqrt</code></a> 1113 method for the <a href="/pkg/math/big/#Int"><code>Int</code></a> type. 1114 </li> 1115 1116 <li> 1117 The mime package 1118 adds a new <a href="/pkg/mime/#WordDecoder"><code>WordDecoder</code></a> type 1119 to decode MIME headers containing RFC 204-encoded words. 1120 It also provides <a href="/pkg/mime/#BEncoding"><code>BEncoding</code></a> and 1121 <a href="/pkg/mime/#QEncoding"><code>QEncoding</code></a> 1122 as implementations of the encoding schemes of RFC 2045 and RFC 2047. 1123 </li> 1124 1125 <li> 1126 The <a href="/pkg/mime/"><code>mime</code></a> package also adds an 1127 <a href="/pkg/mime/#ExtensionsByType"><code>ExtensionsByType</code></a> 1128 function that returns the MIME extensions know to be associated with a given MIME type. 1129 </li> 1130 1131 <li> 1132 There is a new <a href="/pkg/mime/quotedprintable/"><code>mime/quotedprintable</code></a> 1133 package that implements the quoted-printable encoding defined by RFC 2045. 1134 </li> 1135 1136 <li> 1137 The <a href="/pkg/net/"><code>net</code></a> package will now 1138 <a href="/pkg/net/#Dial"><code>Dial</code></a> hostnames by trying each 1139 IP address in order until one succeeds. 1140 The <code><a href="/pkg/net/#Dialer">Dialer</a>.DualStack</code> 1141 mode now implements Happy Eyeballs 1142 (<a href="https://tools.ietf.org/html/rfc6555">RFC 6555</a>) by giving the 1143 first address family a 300ms head start; this value can be overridden by 1144 the new <code>Dialer.FallbackDelay</code>. 1145 </li> 1146 1147 <li> 1148 A number of inconsistencies in the types returned by errors in the 1149 <a href="/pkg/net/"><code>net</code></a> package have been 1150 tidied up. 1151 Most now return an 1152 <a href="/pkg/net/#OpError"><code>OpError</code></a> value 1153 with more information than before. 1154 Also, the <a href="/pkg/net/#OpError"><code>OpError</code></a> 1155 type now includes a <code>Source</code> field that holds the local 1156 network address. 1157 </li> 1158 1159 <li> 1160 The <a href="/pkg/net/http/"><code>net/http</code></a> package now 1161 has support for setting trailers from a server <a href="/pkg/net/http/#Handler"><code>Handler</code></a>. 1162 For details, see the documentation for 1163 <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>. 1164 </li> 1165 1166 <li> 1167 There is a new method to cancel a <a href="/pkg/net/http/"><code>net/http</code></a> 1168 <code>Request</code> by setting the new 1169 <a href="/pkg/net/http/#Request"><code>Request.Cancel</code></a> 1170 field. 1171 It is supported by <code>http.Transport</code>. 1172 The <code>Cancel</code> field's type is compatible with the 1173 <a href="https://godoc.org/golang.org/x/net/context"><code>context.Context.Done</code></a> 1174 return value. 1175 </li> 1176 1177 <li> 1178 Also in the <a href="/pkg/net/http/"><code>net/http</code></a> package, 1179 there is code to ignore the zero <a href="/pkg/time/#Time"><code>Time</code></a> value 1180 in the <a href="/pkg/net/#ServeContent"><code>ServeContent</code></a> function. 1181 As of Go 1.5, it now also ignores a time value equal to the Unix epoch. 1182 </li> 1183 1184 <li> 1185 The <a href="/pkg/net/http/fcgi/"><code>net/http/fcgi</code></a> package 1186 exports two new errors, 1187 <a href="/pkg/net/http/fcgi/#ErrConnClosed"><code>ErrConnClosed</code></a> and 1188 <a href="/pkg/net/http/fcgi/#ErrRequestAborted"><code>ErrRequestAborted</code></a>, 1189 to report the corresponding error conditions. 1190 </li> 1191 1192 <li> 1193 The <a href="/pkg/net/http/cgi/"><code>net/http/cgi</code></a> package 1194 had a bug that mishandled the values of the environment variables 1195 <code>REMOTE_ADDR</code> and <code>REMOTE_HOST</code>. 1196 This has been fixed. 1197 Also, starting with Go 1.5 the package sets the <code>REMOTE_PORT</code> 1198 variable. 1199 </li> 1200 1201 <li> 1202 The <a href="/pkg/net/mail/"><code>net/mail</code></a> package 1203 adds an <a href="/pkg/net/mail/#AddressParser"><code>AddressParser</code></a> 1204 type that can parse mail addresses. 1205 </li> 1206 1207 <li> 1208 The <a href="/pkg/net/smtp/"><code>net/smtp</code></a> package 1209 now has a <a href="/pkg/net/smtp/#Client.TLSConnectionState"><code>TLSConnectionState</code></a> 1210 accessor to the <a href="/pkg/net/smtp/#Client"><code>Client</code></a> 1211 type that returns the client's TLS state. 1212 </li> 1213 1214 <li> 1215 The <a href="/pkg/os/"><code>os</code></a> package 1216 has a new <a href="/pkg/os/#LookupEnv"><code>LookupEnv</code></a> function 1217 that is similar to <a href="/pkg/os/#Getenv"><code>Getenv</code></a> 1218 but can distinguish between an empty environment variable and a missing one. 1219 </li> 1220 1221 <li> 1222 The <a href="/pkg/os/signal/"><code>os/signal</code></a> package 1223 adds new <a href="/pkg/os/signal/#Ignore"><code>Ignore</code></a> and 1224 <a href="/pkg/os/signal/#Reset"><code>Reset</code></a> functions. 1225 </li> 1226 1227 <li> 1228 The <a href="/pkg/runtime/"><code>runtime</code></a>, 1229 <a href="/pkg/runtime/trace/"><code>runtime/trace</code></a>, 1230 and <a href="/pkg/net/http/pprof/"><code>net/http/pprof</code></a> packages 1231 each have new functions to support the tracing facilities described above: 1232 <a href="/pkg/runtime/#ReadTrace"><code>ReadTrace</code></a>, 1233 <a href="/pkg/runtime/#StartTrace"><code>StartTrace</code></a>, 1234 <a href="/pkg/runtime/#StopTrace"><code>StopTrace</code></a>, 1235 <a href="/pkg/runtime/trace/#Start"><code>Start</code></a>, 1236 <a href="/pkg/runtime/trace/#Stop"><code>Stop</code></a>, and 1237 <a href="/pkg/net/http/pprof/#Trace"><code>Trace</code></a>. 1238 See the respective documentation for details. 1239 </li> 1240 1241 <li> 1242 The <a href="/pkg/runtime/pprof/"><code>runtime/pprof</code></a> package 1243 by default now includes overall memory statistics in all memory profiles. 1244 </li> 1245 1246 <li> 1247 The <a href="/pkg/strings/"><code>strings</code></a> package 1248 has a new <a href="/pkg/strings/#Compare"><code>Compare</code></a> function. 1249 This is present to provide symmetry with the <a href="/pkg/bytes/"><code>bytes</code></a> package 1250 but is otherwise unnecessary as strings support comparison natively. 1251 </li> 1252 1253 <li> 1254 The <a href="/pkg/sync/#WaitGroup"><code>WaitGroup</code></a> implementation in 1255 package <a href="/pkg/sync/"><code>sync</code></a> 1256 now diagnoses code that races a call to <a href="/pkg/sync/#WaitGroup.Add"><code>Add</code></a> 1257 against a return from <a href="/pkg/sync/#WaitGroup.Wait"><code>Wait</code></a>. 1258 If it detects this condition, the implementation panics. 1259 </li> 1260 1261 <li> 1262 In the <a href="/pkg/syscall/"><code>syscall</code></a> package, 1263 the Linux <code>SysProcAttr</code> struct now has a 1264 <code>GidMappingsEnableSetgroups</code> field, made necessary 1265 by security changes in Linux 3.19. 1266 On all Unix systems, the struct also has new <code>Foreground</code> and <code>Pgid</code> fields 1267 to provide more control when exec'ing. 1268 On Darwin, there is now a <code>Syscall9</code> function 1269 to support calls with too many arguments. 1270 </li> 1271 1272 <li> 1273 The <a href="/pkg/testing/quick/"><code>testing/quick</code></a> will now 1274 generate <code>nil</code> values for pointer types, 1275 making it possible to use with recursive data structures. 1276 Also, the package now supports generation of array types. 1277 </li> 1278 1279 <li> 1280 In the <a href="/pkg/text/template/"><code>text/template</code></a> and 1281 <a href="/pkg/html/template/"><code>html/template</code></a> packages, 1282 integer constants too large to be represented as a Go integer now trigger a 1283 parse error. Before, they were silently converted to floating point, losing 1284 precision. 1285 </li> 1286 1287 <li> 1288 Also in the <a href="/pkg/text/template/"><code>text/template</code></a> and 1289 <a href="/pkg/html/template/"><code>html/template</code></a> packages, 1290 a new <a href="/pkg/text/template/#Template.Option"><code>Option</code></a> method 1291 allows customization of the behavior of the template during execution. 1292 The sole implemented option allows control over how a missing key is 1293 handled when indexing a map. 1294 The default, which can now be overridden, is as before: to continue with an invalid value. 1295 </li> 1296 1297 <li> 1298 The <a href="/pkg/time/"><code>time</code></a> package's 1299 <code>Time</code> type has a new method 1300 <a href="/pkg/time/#Time.AppendFormat"><code>AppendFormat</code></a>, 1301 which can be used to avoid allocation when printing a time value. 1302 </li> 1303 1304 <li> 1305 The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated 1306 support throughout the system has been upgraded from version 7.0 to 1307 <a href="http://www.unicode.org/versions/Unicode8.0.0/">Unicode 8.0</a>. 1308 </li> 1309 1310 </ul> 1311