github.com/huandu/go@v0.0.0-20151114150818-04e615e41150/doc/go1.1.html (about) 1 <!--{ 2 "Title": "Go 1.1 Release Notes", 3 "Path": "/doc/go1.1", 4 "Template": true 5 }--> 6 7 <h2 id="introduction">Introduction to Go 1.1</h2> 8 9 <p> 10 The release of <a href="/doc/go1.html">Go version 1</a> (Go 1 or Go 1.0 for short) 11 in March of 2012 introduced a new period 12 of stability in the Go language and libraries. 13 That stability has helped nourish a growing community of Go users 14 and systems around the world. 15 Several "point" releases since 16 then—1.0.1, 1.0.2, and 1.0.3—have been issued. 17 These point releases fixed known bugs but made 18 no non-critical changes to the implementation. 19 </p> 20 21 <p> 22 This new release, Go 1.1, keeps the <a href="/doc/go1compat.html">promise 23 of compatibility</a> but adds a couple of significant 24 (backwards-compatible, of course) language changes, has a long list 25 of (again, compatible) library changes, and 26 includes major work on the implementation of the compilers, 27 libraries, and run-time. 28 The focus is on performance. 29 Benchmarking is an inexact science at best, but we see significant, 30 sometimes dramatic speedups for many of our test programs. 31 We trust that many of our users' programs will also see improvements 32 just by updating their Go installation and recompiling. 33 </p> 34 35 <p> 36 This document summarizes the changes between Go 1 and Go 1.1. 37 Very little if any code will need modification to run with Go 1.1, 38 although a couple of rare error cases surface with this release 39 and need to be addressed if they arise. 40 Details appear below; see the discussion of 41 <a href="#int">64-bit ints</a> and <a href="#unicode_literals">Unicode literals</a> 42 in particular. 43 </p> 44 45 <h2 id="language">Changes to the language</h2> 46 47 <p> 48 <a href="/doc/go1compat.html">The Go compatibility document</a> promises 49 that programs written to the Go 1 language specification will continue to operate, 50 and those promises are maintained. 51 In the interest of firming up the specification, though, there are 52 details about some error cases that have been clarified. 53 There are also some new language features. 54 </p> 55 56 <h3 id="divzero">Integer division by zero</h3> 57 58 <p> 59 In Go 1, integer division by a constant zero produced a run-time panic: 60 </p> 61 62 <pre> 63 func f(x int) int { 64 return x/0 65 } 66 </pre> 67 68 <p> 69 In Go 1.1, an integer division by constant zero is not a legal program, so it is a compile-time error. 70 </p> 71 72 <h3 id="unicode_literals">Surrogates in Unicode literals</h3> 73 74 <p> 75 The definition of string and rune literals has been refined to exclude surrogate halves from the 76 set of valid Unicode code points. 77 See the <a href="#unicode">Unicode</a> section for more information. 78 </p> 79 80 <h3 id="method_values">Method values</h3> 81 82 <p> 83 Go 1.1 now implements 84 <a href="/ref/spec#Method_values">method values</a>, 85 which are functions that have been bound to a specific receiver value. 86 For instance, given a 87 <a href="/pkg/bufio/#Writer"><code>Writer</code></a> 88 value <code>w</code>, 89 the expression 90 <code>w.Write</code>, 91 a method value, is a function that will always write to <code>w</code>; it is equivalent to 92 a function literal closing over <code>w</code>: 93 </p> 94 95 <pre> 96 func (p []byte) (n int, err error) { 97 return w.Write(p) 98 } 99 </pre> 100 101 <p> 102 Method values are distinct from method expressions, which generate functions 103 from methods of a given type; the method expression <code>(*bufio.Writer).Write</code> 104 is equivalent to a function with an extra first argument, a receiver of type 105 <code>(*bufio.Writer)</code>: 106 </p> 107 108 <pre> 109 func (w *bufio.Writer, p []byte) (n int, err error) { 110 return w.Write(p) 111 } 112 </pre> 113 114 <p> 115 <em>Updating</em>: No existing code is affected; the change is strictly backward-compatible. 116 </p> 117 118 <h3 id="return">Return requirements</h3> 119 120 <p> 121 Before Go 1.1, a function that returned a value needed an explicit "return" 122 or call to <code>panic</code> at 123 the end of the function; this was a simple way to make the programmer 124 be explicit about the meaning of the function. But there are many cases 125 where a final "return" is clearly unnecessary, such as a function with 126 only an infinite "for" loop. 127 </p> 128 129 <p> 130 In Go 1.1, the rule about final "return" statements is more permissive. 131 It introduces the concept of a 132 <a href="/ref/spec#Terminating_statements"><em>terminating statement</em></a>, 133 a statement that is guaranteed to be the last one a function executes. 134 Examples include 135 "for" loops with no condition and "if-else" 136 statements in which each half ends in a "return". 137 If the final statement of a function can be shown <em>syntactically</em> to 138 be a terminating statement, no final "return" statement is needed. 139 </p> 140 141 <p> 142 Note that the rule is purely syntactic: it pays no attention to the values in the 143 code and therefore requires no complex analysis. 144 </p> 145 146 <p> 147 <em>Updating</em>: The change is backward-compatible, but existing code 148 with superfluous "return" statements and calls to <code>panic</code> may 149 be simplified manually. 150 Such code can be identified by <code>go vet</code>. 151 </p> 152 153 <h2 id="impl">Changes to the implementations and tools</h2> 154 155 <h3 id="gccgo">Status of gccgo</h3> 156 157 <p> 158 The GCC release schedule does not coincide with the Go release schedule, so some skew is inevitable in 159 <code>gccgo</code>'s releases. 160 The 4.8.0 version of GCC shipped in March, 2013 and includes a nearly-Go 1.1 version of <code>gccgo</code>. 161 Its library is a little behind the release, but the biggest difference is that method values are not implemented. 162 Sometime around July 2013, we expect 4.8.2 of GCC to ship with a <code>gccgo</code> 163 providing a complete Go 1.1 implementation. 164 </p> 165 166 <h3 id="gc_flag">Command-line flag parsing</h3> 167 168 <p> 169 In the gc tool chain, the compilers and linkers now use the 170 same command-line flag parsing rules as the Go flag package, a departure 171 from the traditional Unix flag parsing. This may affect scripts that invoke 172 the tool directly. 173 For example, 174 <code>go tool 6c -Fw -Dfoo</code> must now be written 175 <code>go tool 6c -F -w -D foo</code>. 176 </p> 177 178 <h3 id="int">Size of int on 64-bit platforms</h3> 179 180 <p> 181 The language allows the implementation to choose whether the <code>int</code> type and 182 <code>uint</code> types are 32 or 64 bits. Previous Go implementations made <code>int</code> 183 and <code>uint</code> 32 bits on all systems. Both the gc and gccgo implementations 184 now make 185 <code>int</code> and <code>uint</code> 64 bits on 64-bit platforms such as AMD64/x86-64. 186 Among other things, this enables the allocation of slices with 187 more than 2 billion elements on 64-bit platforms. 188 </p> 189 190 <p> 191 <em>Updating</em>: 192 Most programs will be unaffected by this change. 193 Because Go does not allow implicit conversions between distinct 194 <a href="/ref/spec#Numeric_types">numeric types</a>, 195 no programs will stop compiling due to this change. 196 However, programs that contain implicit assumptions 197 that <code>int</code> is only 32 bits may change behavior. 198 For example, this code prints a positive number on 64-bit systems and 199 a negative one on 32-bit systems: 200 </p> 201 202 <pre> 203 x := ^uint32(0) // x is 0xffffffff 204 i := int(x) // i is -1 on 32-bit systems, 0xffffffff on 64-bit 205 fmt.Println(i) 206 </pre> 207 208 <p>Portable code intending 32-bit sign extension (yielding <code>-1</code> on all systems) 209 would instead say: 210 </p> 211 212 <pre> 213 i := int(int32(x)) 214 </pre> 215 216 <h3 id="heap">Heap size on 64-bit architectures</h3> 217 218 <p> 219 On 64-bit architectures, the maximum heap size has been enlarged substantially, 220 from a few gigabytes to several tens of gigabytes. 221 (The exact details depend on the system and may change.) 222 </p> 223 224 <p> 225 On 32-bit architectures, the heap size has not changed. 226 </p> 227 228 <p> 229 <em>Updating</em>: 230 This change should have no effect on existing programs beyond allowing them 231 to run with larger heaps. 232 </p> 233 234 <h3 id="unicode">Unicode</h3> 235 236 <p> 237 To make it possible to represent code points greater than 65535 in UTF-16, 238 Unicode defines <em>surrogate halves</em>, 239 a range of code points to be used only in the assembly of large values, and only in UTF-16. 240 The code points in that surrogate range are illegal for any other purpose. 241 In Go 1.1, this constraint is honored by the compiler, libraries, and run-time: 242 a surrogate half is illegal as a rune value, when encoded as UTF-8, or when 243 encoded in isolation as UTF-16. 244 When encountered, for example in converting from a rune to UTF-8, it is 245 treated as an encoding error and will yield the replacement rune, 246 <a href="/pkg/unicode/utf8/#RuneError"><code>utf8.RuneError</code></a>, 247 U+FFFD. 248 </p> 249 250 <p> 251 This program, 252 </p> 253 254 <pre> 255 import "fmt" 256 257 func main() { 258 fmt.Printf("%+q\n", string(0xD800)) 259 } 260 </pre> 261 262 <p> 263 printed <code>"\ud800"</code> in Go 1.0, but prints <code>"\ufffd"</code> in Go 1.1. 264 </p> 265 266 <p> 267 Surrogate-half Unicode values are now illegal in rune and string constants, so constants such as 268 <code>'\ud800'</code> and <code>"\ud800"</code> are now rejected by the compilers. 269 When written explicitly as UTF-8 encoded bytes, 270 such strings can still be created, as in <code>"\xed\xa0\x80"</code>. 271 However, when such a string is decoded as a sequence of runes, as in a range loop, it will yield only <code>utf8.RuneError</code> 272 values. 273 </p> 274 275 <p> 276 The Unicode byte order mark U+FEFF, encoded in UTF-8, is now permitted as the first 277 character of a Go source file. 278 Even though its appearance in the byte-order-free UTF-8 encoding is clearly unnecessary, 279 some editors add the mark as a kind of "magic number" identifying a UTF-8 encoded file. 280 </p> 281 282 <p> 283 <em>Updating</em>: 284 Most programs will be unaffected by the surrogate change. 285 Programs that depend on the old behavior should be modified to avoid the issue. 286 The byte-order-mark change is strictly backward-compatible. 287 </p> 288 289 <h3 id="race">Race detector</h3> 290 291 <p> 292 A major addition to the tools is a <em>race detector</em>, a way to 293 find bugs in programs caused by concurrent access of the same 294 variable, where at least one of the accesses is a write. 295 This new facility is built into the <code>go</code> tool. 296 For now, it is only available on Linux, Mac OS X, and Windows systems with 297 64-bit x86 processors. 298 To enable it, set the <code>-race</code> flag when building or testing your program 299 (for instance, <code>go test -race</code>). 300 The race detector is documented in <a href="/doc/articles/race_detector.html">a separate article</a>. 301 </p> 302 303 <h3 id="gc_asm">The gc assemblers</h3> 304 305 <p> 306 Due to the change of the <a href="#int"><code>int</code></a> to 64 bits and 307 a new internal <a href="//golang.org/s/go11func">representation of functions</a>, 308 the arrangement of function arguments on the stack has changed in the gc tool chain. 309 Functions written in assembly will need to be revised at least 310 to adjust frame pointer offsets. 311 </p> 312 313 <p> 314 <em>Updating</em>: 315 The <code>go vet</code> command now checks that functions implemented in assembly 316 match the Go function prototypes they implement. 317 </p> 318 319 <h3 id="gocmd">Changes to the go command</h3> 320 321 <p> 322 The <a href="/cmd/go/"><code>go</code></a> command has acquired several 323 changes intended to improve the experience for new Go users. 324 </p> 325 326 <p> 327 First, when compiling, testing, or running Go code, the <code>go</code> command will now give more detailed error messages, 328 including a list of paths searched, when a package cannot be located. 329 </p> 330 331 <pre> 332 $ go build foo/quxx 333 can't load package: package foo/quxx: cannot find package "foo/quxx" in any of: 334 /home/you/go/src/pkg/foo/quxx (from $GOROOT) 335 /home/you/src/foo/quxx (from $GOPATH) 336 </pre> 337 338 <p> 339 Second, the <code>go get</code> command no longer allows <code>$GOROOT</code> 340 as the default destination when downloading package source. 341 To use the <code>go get</code> 342 command, a <a href="/doc/code.html#GOPATH">valid <code>$GOPATH</code></a> is now required. 343 </p> 344 345 <pre> 346 $ GOPATH= go get code.google.com/p/foo/quxx 347 package code.google.com/p/foo/quxx: cannot download, $GOPATH not set. For more details see: go help gopath 348 </pre> 349 350 <p> 351 Finally, as a result of the previous change, the <code>go get</code> command will also fail 352 when <code>$GOPATH</code> and <code>$GOROOT</code> are set to the same value. 353 </p> 354 355 <pre> 356 $ GOPATH=$GOROOT go get code.google.com/p/foo/quxx 357 warning: GOPATH set to GOROOT (/home/you/go) has no effect 358 package code.google.com/p/foo/quxx: cannot download, $GOPATH must not be set to $GOROOT. For more details see: go help gopath 359 </pre> 360 361 <h3 id="gotest">Changes to the go test command</h3> 362 363 <p> 364 The <a href="/cmd/go/#hdr-Test_packages"><code>go test</code></a> 365 command no longer deletes the binary when run with profiling enabled, 366 to make it easier to analyze the profile. 367 The implementation sets the <code>-c</code> flag automatically, so after running, 368 </p> 369 370 <pre> 371 $ go test -cpuprofile cpuprof.out mypackage 372 </pre> 373 374 <p> 375 the file <code>mypackage.test</code> will be left in the directory where <code>go test</code> was run. 376 </p> 377 378 <p> 379 The <a href="/cmd/go/#hdr-Test_packages"><code>go test</code></a> 380 command can now generate profiling information 381 that reports where goroutines are blocked, that is, 382 where they tend to stall waiting for an event such as a channel communication. 383 The information is presented as a 384 <em>blocking profile</em> 385 enabled with the 386 <code>-blockprofile</code> 387 option of 388 <code>go test</code>. 389 Run <code>go help test</code> for more information. 390 </p> 391 392 <h3 id="gofix">Changes to the go fix command</h3> 393 394 <p> 395 The <a href="/cmd/fix/"><code>fix</code></a> command, usually run as 396 <code>go fix</code>, no longer applies fixes to update code from 397 before Go 1 to use Go 1 APIs. 398 To update pre-Go 1 code to Go 1.1, use a Go 1.0 tool chain 399 to convert the code to Go 1.0 first. 400 </p> 401 402 <h3 id="tags">Build constraints</h3> 403 404 <p> 405 The "<code>go1.1</code>" tag has been added to the list of default 406 <a href="/pkg/go/build/#hdr-Build_Constraints">build constraints</a>. 407 This permits packages to take advantage of the new features in Go 1.1 while 408 remaining compatible with earlier versions of Go. 409 </p> 410 411 <p> 412 To build a file only with Go 1.1 and above, add this build constraint: 413 </p> 414 415 <pre> 416 // +build go1.1 417 </pre> 418 419 <p> 420 To build a file only with Go 1.0.x, use the converse constraint: 421 </p> 422 423 <pre> 424 // +build !go1.1 425 </pre> 426 427 <h3 id="platforms">Additional platforms</h3> 428 429 <p> 430 The Go 1.1 tool chain adds experimental support for <code>freebsd/arm</code>, 431 <code>netbsd/386</code>, <code>netbsd/amd64</code>, <code>netbsd/arm</code>, 432 <code>openbsd/386</code> and <code>openbsd/amd64</code> platforms. 433 </p> 434 435 <p> 436 An ARMv6 or later processor is required for <code>freebsd/arm</code> or 437 <code>netbsd/arm</code>. 438 </p> 439 440 <p> 441 Go 1.1 adds experimental support for <code>cgo</code> on <code>linux/arm</code>. 442 </p> 443 444 <h3 id="crosscompile">Cross compilation</h3> 445 446 <p> 447 When cross-compiling, the <code>go</code> tool will disable <code>cgo</code> 448 support by default. 449 </p> 450 451 <p> 452 To explicitly enable <code>cgo</code>, set <code>CGO_ENABLED=1</code>. 453 </p> 454 455 <h2 id="performance">Performance</h2> 456 457 <p> 458 The performance of code compiled with the Go 1.1 gc tool suite should be noticeably 459 better for most Go programs. 460 Typical improvements relative to Go 1.0 seem to be about 30%-40%, sometimes 461 much more, but occasionally less or even non-existent. 462 There are too many small performance-driven tweaks through the tools and libraries 463 to list them all here, but the following major changes are worth noting: 464 </p> 465 466 <ul> 467 <li>The gc compilers generate better code in many cases, most noticeably for 468 floating point on the 32-bit Intel architecture.</li> 469 <li>The gc compilers do more in-lining, including for some operations 470 in the run-time such as <a href="/pkg/builtin/#append"><code>append</code></a> 471 and interface conversions.</li> 472 <li>There is a new implementation of Go maps with significant reduction in 473 memory footprint and CPU time.</li> 474 <li>The garbage collector has been made more parallel, which can reduce 475 latencies for programs running on multiple CPUs.</li> 476 <li>The garbage collector is also more precise, which costs a small amount of 477 CPU time but can reduce the size of the heap significantly, especially 478 on 32-bit architectures.</li> 479 <li>Due to tighter coupling of the run-time and network libraries, fewer 480 context switches are required on network operations.</li> 481 </ul> 482 483 <h2 id="library">Changes to the standard library</h2> 484 485 <h3 id="bufio_scanner">bufio.Scanner</h3> 486 487 <p> 488 The various routines to scan textual input in the 489 <a href="/pkg/bufio/"><code>bufio</code></a> 490 package, 491 <a href="/pkg/bufio/#Reader.ReadBytes"><code>ReadBytes</code></a>, 492 <a href="/pkg/bufio/#Reader.ReadString"><code>ReadString</code></a> 493 and particularly 494 <a href="/pkg/bufio/#Reader.ReadLine"><code>ReadLine</code></a>, 495 are needlessly complex to use for simple purposes. 496 In Go 1.1, a new type, 497 <a href="/pkg/bufio/#Scanner"><code>Scanner</code></a>, 498 has been added to make it easier to do simple tasks such as 499 read the input as a sequence of lines or space-delimited words. 500 It simplifies the problem by terminating the scan on problematic 501 input such as pathologically long lines, and having a simple 502 default: line-oriented input, with each line stripped of its terminator. 503 Here is code to reproduce the input a line at a time: 504 </p> 505 506 <pre> 507 scanner := bufio.NewScanner(os.Stdin) 508 for scanner.Scan() { 509 fmt.Println(scanner.Text()) // Println will add back the final '\n' 510 } 511 if err := scanner.Err(); err != nil { 512 fmt.Fprintln(os.Stderr, "reading standard input:", err) 513 } 514 </pre> 515 516 <p> 517 Scanning behavior can be adjusted through a function to control subdividing the input 518 (see the documentation for <a href="/pkg/bufio/#SplitFunc"><code>SplitFunc</code></a>), 519 but for tough problems or the need to continue past errors, the older interface 520 may still be required. 521 </p> 522 523 <h3 id="net">net</h3> 524 525 <p> 526 The protocol-specific resolvers in the <a href="/pkg/net/"><code>net</code></a> package were formerly 527 lax about the network name passed in. 528 Although the documentation was clear 529 that the only valid networks for 530 <a href="/pkg/net/#ResolveTCPAddr"><code>ResolveTCPAddr</code></a> 531 are <code>"tcp"</code>, 532 <code>"tcp4"</code>, and <code>"tcp6"</code>, the Go 1.0 implementation silently accepted any string. 533 The Go 1.1 implementation returns an error if the network is not one of those strings. 534 The same is true of the other protocol-specific resolvers <a href="/pkg/net/#ResolveIPAddr"><code>ResolveIPAddr</code></a>, 535 <a href="/pkg/net/#ResolveUDPAddr"><code>ResolveUDPAddr</code></a>, and 536 <a href="/pkg/net/#ResolveUnixAddr"><code>ResolveUnixAddr</code></a>. 537 </p> 538 539 <p> 540 The previous implementation of 541 <a href="/pkg/net/#ListenUnixgram"><code>ListenUnixgram</code></a> 542 returned a 543 <a href="/pkg/net/#UDPConn"><code>UDPConn</code></a> as 544 a representation of the connection endpoint. 545 The Go 1.1 implementation instead returns a 546 <a href="/pkg/net/#UnixConn"><code>UnixConn</code></a> 547 to allow reading and writing 548 with its 549 <a href="/pkg/net/#UnixConn.ReadFrom"><code>ReadFrom</code></a> 550 and 551 <a href="/pkg/net/#UnixConn.WriteTo"><code>WriteTo</code></a> 552 methods. 553 </p> 554 555 <p> 556 The data structures 557 <a href="/pkg/net/#IPAddr"><code>IPAddr</code></a>, 558 <a href="/pkg/net/#TCPAddr"><code>TCPAddr</code></a>, and 559 <a href="/pkg/net/#UDPAddr"><code>UDPAddr</code></a> 560 add a new string field called <code>Zone</code>. 561 Code using untagged composite literals (e.g. <code>net.TCPAddr{ip, port}</code>) 562 instead of tagged literals (<code>net.TCPAddr{IP: ip, Port: port}</code>) 563 will break due to the new field. 564 The Go 1 compatibility rules allow this change: client code must use tagged literals to avoid such breakages. 565 </p> 566 567 <p> 568 <em>Updating</em>: 569 To correct breakage caused by the new struct field, 570 <code>go fix</code> will rewrite code to add tags for these types. 571 More generally, <code>go vet</code> will identify composite literals that 572 should be revised to use field tags. 573 </p> 574 575 <h3 id="reflect">reflect</h3> 576 577 <p> 578 The <a href="/pkg/reflect/"><code>reflect</code></a> package has several significant additions. 579 </p> 580 581 <p> 582 It is now possible to run a "select" statement using 583 the <code>reflect</code> package; see the description of 584 <a href="/pkg/reflect/#Select"><code>Select</code></a> 585 and 586 <a href="/pkg/reflect/#SelectCase"><code>SelectCase</code></a> 587 for details. 588 </p> 589 590 <p> 591 The new method 592 <a href="/pkg/reflect/#Value.Convert"><code>Value.Convert</code></a> 593 (or 594 <a href="/pkg/reflect/#Type"><code>Type.ConvertibleTo</code></a>) 595 provides functionality to execute a Go conversion or type assertion operation 596 on a 597 <a href="/pkg/reflect/#Value"><code>Value</code></a> 598 (or test for its possibility). 599 </p> 600 601 <p> 602 The new function 603 <a href="/pkg/reflect/#MakeFunc"><code>MakeFunc</code></a> 604 creates a wrapper function to make it easier to call a function with existing 605 <a href="/pkg/reflect/#Value"><code>Values</code></a>, 606 doing the standard Go conversions among the arguments, for instance 607 to pass an actual <code>int</code> to a formal <code>interface{}</code>. 608 </p> 609 610 <p> 611 Finally, the new functions 612 <a href="/pkg/reflect/#ChanOf"><code>ChanOf</code></a>, 613 <a href="/pkg/reflect/#MapOf"><code>MapOf</code></a> 614 and 615 <a href="/pkg/reflect/#SliceOf"><code>SliceOf</code></a> 616 construct new 617 <a href="/pkg/reflect/#Type"><code>Types</code></a> 618 from existing types, for example to construct the type <code>[]T</code> given 619 only <code>T</code>. 620 </p> 621 622 623 <h3 id="time">time</h3> 624 <p> 625 On FreeBSD, Linux, NetBSD, OS X and OpenBSD, previous versions of the 626 <a href="/pkg/time/"><code>time</code></a> package 627 returned times with microsecond precision. 628 The Go 1.1 implementation on these 629 systems now returns times with nanosecond precision. 630 Programs that write to an external format with microsecond precision 631 and read it back, expecting to recover the original value, will be affected 632 by the loss of precision. 633 There are two new methods of <a href="/pkg/time/#Time"><code>Time</code></a>, 634 <a href="/pkg/time/#Time.Round"><code>Round</code></a> 635 and 636 <a href="/pkg/time/#Time.Truncate"><code>Truncate</code></a>, 637 that can be used to remove precision from a time before passing it to 638 external storage. 639 </p> 640 641 <p> 642 The new method 643 <a href="/pkg/time/#Time.YearDay"><code>YearDay</code></a> 644 returns the one-indexed integral day number of the year specified by the time value. 645 </p> 646 647 <p> 648 The 649 <a href="/pkg/time/#Timer"><code>Timer</code></a> 650 type has a new method 651 <a href="/pkg/time/#Timer.Reset"><code>Reset</code></a> 652 that modifies the timer to expire after a specified duration. 653 </p> 654 655 <p> 656 Finally, the new function 657 <a href="/pkg/time/#ParseInLocation"><code>ParseInLocation</code></a> 658 is like the existing 659 <a href="/pkg/time/#Parse"><code>Parse</code></a> 660 but parses the time in the context of a location (time zone), ignoring 661 time zone information in the parsed string. 662 This function addresses a common source of confusion in the time API. 663 </p> 664 665 <p> 666 <em>Updating</em>: 667 Code that needs to read and write times using an external format with 668 lower precision should be modified to use the new methods. 669 </p> 670 671 <h3 id="exp_old">Exp and old subtrees moved to go.exp and go.text subrepositories</h3> 672 673 <p> 674 To make it easier for binary distributions to access them if desired, the <code>exp</code> 675 and <code>old</code> source subtrees, which are not included in binary distributions, 676 have been moved to the new <code>go.exp</code> subrepository at 677 <code>code.google.com/p/go.exp</code>. To access the <code>ssa</code> package, 678 for example, run 679 </p> 680 681 <pre> 682 $ go get code.google.com/p/go.exp/ssa 683 </pre> 684 685 <p> 686 and then in Go source, 687 </p> 688 689 <pre> 690 import "code.google.com/p/go.exp/ssa" 691 </pre> 692 693 <p> 694 The old package <code>exp/norm</code> has also been moved, but to a new repository 695 <code>go.text</code>, where the Unicode APIs and other text-related packages will 696 be developed. 697 </p> 698 699 <h3 id="new_packages">New packages</h3> 700 701 <p> 702 There are three new packages. 703 </p> 704 705 <ul> 706 <li> 707 The <a href="/pkg/go/format/"><code>go/format</code></a> package provides 708 a convenient way for a program to access the formatting capabilities of the 709 <a href="/cmd/go/#hdr-Run_gofmt_on_package_sources"><code>go fmt</code></a> command. 710 It has two functions, 711 <a href="/pkg/go/format/#Node"><code>Node</code></a> to format a Go parser 712 <a href="/pkg/go/ast/#Node"><code>Node</code></a>, 713 and 714 <a href="/pkg/go/format/#Source"><code>Source</code></a> 715 to reformat arbitrary Go source code into the standard format as provided by the 716 <a href="/cmd/go/#hdr-Run_gofmt_on_package_sources"><code>go fmt</code></a> command. 717 </li> 718 719 <li> 720 The <a href="/pkg/net/http/cookiejar/"><code>net/http/cookiejar</code></a> package provides the basics for managing HTTP cookies. 721 </li> 722 723 <li> 724 The <a href="/pkg/runtime/race/"><code>runtime/race</code></a> package provides low-level facilities for data race detection. 725 It is internal to the race detector and does not otherwise export any user-visible functionality. 726 </li> 727 </ul> 728 729 <h3 id="minor_library_changes">Minor changes to the library</h3> 730 731 <p> 732 The following list summarizes a number of minor changes to the library, mostly additions. 733 See the relevant package documentation for more information about each change. 734 </p> 735 736 <ul> 737 <li> 738 The <a href="/pkg/bytes/"><code>bytes</code></a> package has two new functions, 739 <a href="/pkg/bytes/#TrimPrefix"><code>TrimPrefix</code></a> 740 and 741 <a href="/pkg/bytes/#TrimSuffix"><code>TrimSuffix</code></a>, 742 with self-evident properties. 743 Also, the <a href="/pkg/bytes/#Buffer"><code>Buffer</code></a> type 744 has a new method 745 <a href="/pkg/bytes/#Buffer.Grow"><code>Grow</code></a> that 746 provides some control over memory allocation inside the buffer. 747 Finally, the 748 <a href="/pkg/bytes/#Reader"><code>Reader</code></a> type now has a 749 <a href="/pkg/strings/#Reader.WriteTo"><code>WriteTo</code></a> method 750 so it implements the 751 <a href="/pkg/io/#WriterTo"><code>io.WriterTo</code></a> interface. 752 </li> 753 754 <li> 755 The <a href="/pkg/compress/gzip/"><code>compress/gzip</code></a> package has 756 a new <a href="/pkg/compress/gzip/#Writer.Flush"><code>Flush</code></a> 757 method for its 758 <a href="/pkg/compress/gzip/#Writer"><code>Writer</code></a> 759 type that flushes its underlying <code>flate.Writer</code>. 760 </li> 761 762 <li> 763 The <a href="/pkg/crypto/hmac/"><code>crypto/hmac</code></a> package has a new function, 764 <a href="/pkg/crypto/hmac/#Equal"><code>Equal</code></a>, to compare two MACs. 765 </li> 766 767 <li> 768 The <a href="/pkg/crypto/x509/"><code>crypto/x509</code></a> package 769 now supports PEM blocks (see 770 <a href="/pkg/crypto/x509/#DecryptPEMBlock"><code>DecryptPEMBlock</code></a> for instance), 771 and a new function 772 <a href="/pkg/crypto/x509/#ParseECPrivateKey"><code>ParseECPrivateKey</code></a> to parse elliptic curve private keys. 773 </li> 774 775 <li> 776 The <a href="/pkg/database/sql/"><code>database/sql</code></a> package 777 has a new 778 <a href="/pkg/database/sql/#DB.Ping"><code>Ping</code></a> 779 method for its 780 <a href="/pkg/database/sql/#DB"><code>DB</code></a> 781 type that tests the health of the connection. 782 </li> 783 784 <li> 785 The <a href="/pkg/database/sql/driver/"><code>database/sql/driver</code></a> package 786 has a new 787 <a href="/pkg/database/sql/driver/#Queryer"><code>Queryer</code></a> 788 interface that a 789 <a href="/pkg/database/sql/driver/#Conn"><code>Conn</code></a> 790 may implement to improve performance. 791 </li> 792 793 <li> 794 The <a href="/pkg/encoding/json/"><code>encoding/json</code></a> package's 795 <a href="/pkg/encoding/json/#Decoder"><code>Decoder</code></a> 796 has a new method 797 <a href="/pkg/encoding/json/#Decoder.Buffered"><code>Buffered</code></a> 798 to provide access to the remaining data in its buffer, 799 as well as a new method 800 <a href="/pkg/encoding/json/#Decoder.UseNumber"><code>UseNumber</code></a> 801 to unmarshal a value into the new type 802 <a href="/pkg/encoding/json/#Number"><code>Number</code></a>, 803 a string, rather than a float64. 804 </li> 805 806 <li> 807 The <a href="/pkg/encoding/xml/"><code>encoding/xml</code></a> package 808 has a new function, 809 <a href="/pkg/encoding/xml/#EscapeText"><code>EscapeText</code></a>, 810 which writes escaped XML output, 811 and a method on 812 <a href="/pkg/encoding/xml/#Encoder"><code>Encoder</code></a>, 813 <a href="/pkg/encoding/xml/#Encoder.Indent"><code>Indent</code></a>, 814 to specify indented output. 815 </li> 816 817 <li> 818 In the <a href="/pkg/go/ast/"><code>go/ast</code></a> package, a 819 new type <a href="/pkg/go/ast/#CommentMap"><code>CommentMap</code></a> 820 and associated methods makes it easier to extract and process comments in Go programs. 821 </li> 822 823 <li> 824 In the <a href="/pkg/go/doc/"><code>go/doc</code></a> package, 825 the parser now keeps better track of stylized annotations such as <code>TODO(joe)</code> 826 throughout the code, 827 information that the <a href="/cmd/godoc/"><code>godoc</code></a> 828 command can filter or present according to the value of the <code>-notes</code> flag. 829 </li> 830 831 <li> 832 The undocumented and only partially implemented "noescape" feature of the 833 <a href="/pkg/html/template/"><code>html/template</code></a> 834 package has been removed; programs that depend on it will break. 835 </li> 836 837 <li> 838 The <a href="/pkg/image/jpeg/"><code>image/jpeg</code></a> package now 839 reads progressive JPEG files and handles a few more subsampling configurations. 840 </li> 841 842 <li> 843 The <a href="/pkg/io/"><code>io</code></a> package now exports the 844 <a href="/pkg/io/#ByteWriter"><code>io.ByteWriter</code></a> interface to capture the common 845 functionality of writing a byte at a time. 846 It also exports a new error, <a href="/pkg/io/#ErrNoProgress"><code>ErrNoProgress</code></a>, 847 used to indicate a <code>Read</code> implementation is looping without delivering data. 848 </li> 849 850 <li> 851 The <a href="/pkg/log/syslog/"><code>log/syslog</code></a> package now provides better support 852 for OS-specific logging features. 853 </li> 854 855 <li> 856 The <a href="/pkg/math/big/"><code>math/big</code></a> package's 857 <a href="/pkg/math/big/#Int"><code>Int</code></a> type 858 now has methods 859 <a href="/pkg/math/big/#Int.MarshalJSON"><code>MarshalJSON</code></a> 860 and 861 <a href="/pkg/math/big/#Int.UnmarshalJSON"><code>UnmarshalJSON</code></a> 862 to convert to and from a JSON representation. 863 Also, 864 <a href="/pkg/math/big/#Int"><code>Int</code></a> 865 can now convert directly to and from a <code>uint64</code> using 866 <a href="/pkg/math/big/#Int.Uint64"><code>Uint64</code></a> 867 and 868 <a href="/pkg/math/big/#Int.SetUint64"><code>SetUint64</code></a>, 869 while 870 <a href="/pkg/math/big/#Rat"><code>Rat</code></a> 871 can do the same with <code>float64</code> using 872 <a href="/pkg/math/big/#Rat.Float64"><code>Float64</code></a> 873 and 874 <a href="/pkg/math/big/#Rat.SetFloat64"><code>SetFloat64</code></a>. 875 </li> 876 877 <li> 878 The <a href="/pkg/mime/multipart/"><code>mime/multipart</code></a> package 879 has a new method for its 880 <a href="/pkg/mime/multipart/#Writer"><code>Writer</code></a>, 881 <a href="/pkg/mime/multipart/#Writer.SetBoundary"><code>SetBoundary</code></a>, 882 to define the boundary separator used to package the output. 883 The <a href="/pkg/mime/multipart/#Reader"><code>Reader</code></a> also now 884 transparently decodes any <code>quoted-printable</code> parts and removes 885 the <code>Content-Transfer-Encoding</code> header when doing so. 886 </li> 887 888 <li> 889 The 890 <a href="/pkg/net/"><code>net</code></a> package's 891 <a href="/pkg/net/#ListenUnixgram"><code>ListenUnixgram</code></a> 892 function has changed return types: it now returns a 893 <a href="/pkg/net/#UnixConn"><code>UnixConn</code></a> 894 rather than a 895 <a href="/pkg/net/#UDPConn"><code>UDPConn</code></a>, which was 896 clearly a mistake in Go 1.0. 897 Since this API change fixes a bug, it is permitted by the Go 1 compatibility rules. 898 </li> 899 900 <li> 901 The <a href="/pkg/net/"><code>net</code></a> package includes a new type, 902 <a href="/pkg/net/#Dialer"><code>Dialer</code></a>, to supply options to 903 <a href="/pkg/net/#Dialer.Dial"><code>Dial</code></a>. 904 </li> 905 906 <li> 907 The <a href="/pkg/net/"><code>net</code></a> package adds support for 908 link-local IPv6 addresses with zone qualifiers, such as <code>fe80::1%lo0</code>. 909 The address structures <a href="/pkg/net/#IPAddr"><code>IPAddr</code></a>, 910 <a href="/pkg/net/#UDPAddr"><code>UDPAddr</code></a>, and 911 <a href="/pkg/net/#TCPAddr"><code>TCPAddr</code></a> 912 record the zone in a new field, and functions that expect string forms of these addresses, such as 913 <a href="/pkg/net/#Dial"><code>Dial</code></a>, 914 <a href="/pkg/net/#ResolveIPAddr"><code>ResolveIPAddr</code></a>, 915 <a href="/pkg/net/#ResolveUDPAddr"><code>ResolveUDPAddr</code></a>, and 916 <a href="/pkg/net/#ResolveTCPAddr"><code>ResolveTCPAddr</code></a>, 917 now accept the zone-qualified form. 918 </li> 919 920 <li> 921 The <a href="/pkg/net/"><code>net</code></a> package adds 922 <a href="/pkg/net/#LookupNS"><code>LookupNS</code></a> to its suite of resolving functions. 923 <code>LookupNS</code> returns the <a href="/pkg/net/#NS">NS records</a> for a host name. 924 </li> 925 926 <li> 927 The <a href="/pkg/net/"><code>net</code></a> package adds protocol-specific 928 packet reading and writing methods to 929 <a href="/pkg/net/#IPConn"><code>IPConn</code></a> 930 (<a href="/pkg/net/#IPConn.ReadMsgIP"><code>ReadMsgIP</code></a> 931 and <a href="/pkg/net/#IPConn.WriteMsgIP"><code>WriteMsgIP</code></a>) and 932 <a href="/pkg/net/#UDPConn"><code>UDPConn</code></a> 933 (<a href="/pkg/net/#UDPConn.ReadMsgUDP"><code>ReadMsgUDP</code></a> and 934 <a href="/pkg/net/#UDPConn.WriteMsgUDP"><code>WriteMsgUDP</code></a>). 935 These are specialized versions of <a href="/pkg/net/#PacketConn"><code>PacketConn</code></a>'s 936 <code>ReadFrom</code> and <code>WriteTo</code> methods that provide access to out-of-band data associated 937 with the packets. 938 </li> 939 940 <li> 941 The <a href="/pkg/net/"><code>net</code></a> package adds methods to 942 <a href="/pkg/net/#UnixConn"><code>UnixConn</code></a> to allow closing half of the connection 943 (<a href="/pkg/net/#UnixConn.CloseRead"><code>CloseRead</code></a> and 944 <a href="/pkg/net/#UnixConn.CloseWrite"><code>CloseWrite</code></a>), 945 matching the existing methods of <a href="/pkg/net/#TCPConn"><code>TCPConn</code></a>. 946 </li> 947 948 <li> 949 The <a href="/pkg/net/http/"><code>net/http</code></a> package includes several new additions. 950 <a href="/pkg/net/http/#ParseTime"><code>ParseTime</code></a> parses a time string, trying 951 several common HTTP time formats. 952 The <a href="/pkg/net/http/#Request.PostFormValue"><code>PostFormValue</code></a> method of 953 <a href="/pkg/net/http/#Request"><code>Request</code></a> is like 954 <a href="/pkg/net/http/#Request.FormValue"><code>FormValue</code></a> but ignores URL parameters. 955 The <a href="/pkg/net/http/#CloseNotifier"><code>CloseNotifier</code></a> interface provides a mechanism 956 for a server handler to discover when a client has disconnected. 957 The <code>ServeMux</code> type now has a 958 <a href="/pkg/net/http/#ServeMux.Handler"><code>Handler</code></a> method to access a path's 959 <code>Handler</code> without executing it. 960 The <code>Transport</code> can now cancel an in-flight request with 961 <a href="/pkg/net/http/#Transport.CancelRequest"><code>CancelRequest</code></a>. 962 Finally, the Transport is now more aggressive at closing TCP connections when 963 a <a href="/pkg/net/http/#Response"><code>Response.Body</code></a> is closed before 964 being fully consumed. 965 </li> 966 967 <li> 968 The <a href="/pkg/net/mail/"><code>net/mail</code></a> package has two new functions, 969 <a href="/pkg/net/mail/#ParseAddress"><code>ParseAddress</code></a> and 970 <a href="/pkg/net/mail/#ParseAddressList"><code>ParseAddressList</code></a>, 971 to parse RFC 5322-formatted mail addresses into 972 <a href="/pkg/net/mail/#Address"><code>Address</code></a> structures. 973 </li> 974 975 <li> 976 The <a href="/pkg/net/smtp/"><code>net/smtp</code></a> package's 977 <a href="/pkg/net/smtp/#Client"><code>Client</code></a> type has a new method, 978 <a href="/pkg/net/smtp/#Client.Hello"><code>Hello</code></a>, 979 which transmits a <code>HELO</code> or <code>EHLO</code> message to the server. 980 </li> 981 982 <li> 983 The <a href="/pkg/net/textproto/"><code>net/textproto</code></a> package 984 has two new functions, 985 <a href="/pkg/net/textproto/#TrimBytes"><code>TrimBytes</code></a> and 986 <a href="/pkg/net/textproto/#TrimString"><code>TrimString</code></a>, 987 which do ASCII-only trimming of leading and trailing spaces. 988 </li> 989 990 <li> 991 The new method <a href="/pkg/os/#FileMode.IsRegular"><code>os.FileMode.IsRegular</code></a> makes it easy to ask if a file is a plain file. 992 </li> 993 994 <li> 995 The <a href="/pkg/os/signal/"><code>os/signal</code></a> package has a new function, 996 <a href="/pkg/os/signal/#Stop"><code>Stop</code></a>, which stops the package delivering 997 any further signals to the channel. 998 </li> 999 1000 <li> 1001 The <a href="/pkg/regexp/"><code>regexp</code></a> package 1002 now supports Unix-original leftmost-longest matches through the 1003 <a href="/pkg/regexp/#Regexp.Longest"><code>Regexp.Longest</code></a> 1004 method, while 1005 <a href="/pkg/regexp/#Regexp.Split"><code>Regexp.Split</code></a> slices 1006 strings into pieces based on separators defined by the regular expression. 1007 </li> 1008 1009 <li> 1010 The <a href="/pkg/runtime/debug/"><code>runtime/debug</code></a> package 1011 has three new functions regarding memory usage. 1012 The <a href="/pkg/runtime/debug/#FreeOSMemory"><code>FreeOSMemory</code></a> 1013 function triggers a run of the garbage collector and then attempts to return unused 1014 memory to the operating system; 1015 the <a href="/pkg/runtime/debug/#ReadGCStats"><code>ReadGCStats</code></a> 1016 function retrieves statistics about the collector; and 1017 <a href="/pkg/runtime/debug/#SetGCPercent"><code>SetGCPercent</code></a> 1018 provides a programmatic way to control how often the collector runs, 1019 including disabling it altogether. 1020 </li> 1021 1022 <li> 1023 The <a href="/pkg/sort/"><code>sort</code></a> package has a new function, 1024 <a href="/pkg/sort/#Reverse"><code>Reverse</code></a>. 1025 Wrapping the argument of a call to 1026 <a href="/pkg/sort/#Sort"><code>sort.Sort</code></a> 1027 with a call to <code>Reverse</code> causes the sort order to be reversed. 1028 </li> 1029 1030 <li> 1031 The <a href="/pkg/strings/"><code>strings</code></a> package has two new functions, 1032 <a href="/pkg/strings/#TrimPrefix"><code>TrimPrefix</code></a> 1033 and 1034 <a href="/pkg/strings/#TrimSuffix"><code>TrimSuffix</code></a> 1035 with self-evident properties, and the new method 1036 <a href="/pkg/strings/#Reader.WriteTo"><code>Reader.WriteTo</code></a> so the 1037 <a href="/pkg/strings/#Reader"><code>Reader</code></a> 1038 type now implements the 1039 <a href="/pkg/io/#WriterTo"><code>io.WriterTo</code></a> interface. 1040 </li> 1041 1042 <li> 1043 The <a href="/pkg/syscall/"><code>syscall</code></a> package's 1044 <a href="/pkg/syscall/#Fchflags"><code>Fchflags</code></a> function on various BSDs 1045 (including Darwin) has changed signature. 1046 It now takes an int as the first parameter instead of a string. 1047 Since this API change fixes a bug, it is permitted by the Go 1 compatibility rules. 1048 </li> 1049 <li> 1050 The <a href="/pkg/syscall/"><code>syscall</code></a> package also has received many updates 1051 to make it more inclusive of constants and system calls for each supported operating system. 1052 </li> 1053 1054 <li> 1055 The <a href="/pkg/testing/"><code>testing</code></a> package now automates the generation of allocation 1056 statistics in tests and benchmarks using the new 1057 <a href="/pkg/testing/#AllocsPerRun"><code>AllocsPerRun</code></a> function. And the 1058 <a href="/pkg/testing/#B.ReportAllocs"><code>ReportAllocs</code></a> 1059 method on <a href="/pkg/testing/#B"><code>testing.B</code></a> will enable printing of 1060 memory allocation statistics for the calling benchmark. It also introduces the 1061 <a href="/pkg/testing/#BenchmarkResult.AllocsPerOp"><code>AllocsPerOp</code></a> method of 1062 <a href="/pkg/testing/#BenchmarkResult"><code>BenchmarkResult</code></a>. 1063 There is also a new 1064 <a href="/pkg/testing/#Verbose"><code>Verbose</code></a> function to test the state of the <code>-v</code> 1065 command-line flag, 1066 and a new 1067 <a href="/pkg/testing/#B.Skip"><code>Skip</code></a> method of 1068 <a href="/pkg/testing/#B"><code>testing.B</code></a> and 1069 <a href="/pkg/testing/#T"><code>testing.T</code></a> 1070 to simplify skipping an inappropriate test. 1071 </li> 1072 1073 <li> 1074 In the <a href="/pkg/text/template/"><code>text/template</code></a> 1075 and 1076 <a href="/pkg/html/template/"><code>html/template</code></a> packages, 1077 templates can now use parentheses to group the elements of pipelines, simplifying the construction of complex pipelines. 1078 Also, as part of the new parser, the 1079 <a href="/pkg/text/template/parse/#Node"><code>Node</code></a> interface got two new methods to provide 1080 better error reporting. 1081 Although this violates the Go 1 compatibility rules, 1082 no existing code should be affected because this interface is explicitly intended only to be used 1083 by the 1084 <a href="/pkg/text/template/"><code>text/template</code></a> 1085 and 1086 <a href="/pkg/html/template/"><code>html/template</code></a> 1087 packages and there are safeguards to guarantee that. 1088 </li> 1089 1090 <li> 1091 The implementation of the <a href="/pkg/unicode/"><code>unicode</code></a> package has been updated to Unicode version 6.2.0. 1092 </li> 1093 1094 <li> 1095 In the <a href="/pkg/unicode/utf8/"><code>unicode/utf8</code></a> package, 1096 the new function <a href="/pkg/unicode/utf8/#ValidRune"><code>ValidRune</code></a> reports whether the rune is a valid Unicode code point. 1097 To be valid, a rune must be in range and not be a surrogate half. 1098 </li> 1099 </ul>