github.com/spotify/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/doc/devel/release.html (about) 1 <!--{ 2 "Title": "Release History" 3 }--> 4 5 <p>This page summarizes the changes between official stable releases of Go. 6 The <a href="http://code.google.com/p/go/source/list">Mercurial change log</a> 7 has the full details.</p> 8 9 <p>To update to a specific release, use:</p> 10 11 <pre> 12 hg pull 13 hg update <i>tag</i> 14 </pre> 15 16 <h2 id="go1.1">go1.1 (released 2013/05/13)</h2> 17 18 <p> 19 Go 1.1 is a major release of Go. 20 Read the <a href="/doc/go1.1.html">Go 1.1 Release Notes</a> for 21 more information. 22 </p> 23 24 <h3 id="go1.1.minor">Minor revisions</h3> 25 26 <p> 27 go1.1.1 (released 2013/06/13) includes several compiler and runtime bug fixes. 28 See the <a href="https://code.google.com/p/go/source/list?name=release-branch.go1.1&r=43c4a41d24382a56a90e924800c681e435d9e399">change history</a> for details. 29 </p> 30 31 <p> 32 go1.1.2 (released 2013/08/13) includes fixes to the <code>gc</code> compiler 33 and <code>cgo</code>, and the <code>bufio</code>, <code>runtime</code>, 34 <code>syscall</code>, and <code>time</code> packages. 35 See the <a href="https://code.google.com/p/go/source/list?name=release-branch.go1.1&r=a6a9792f94acd4ff686b2bc57383d163608b91cf">change history</a> for details. 36 If you use package syscall's <code>Getrlimit</code> and <code>Setrlimit</code> 37 functions under Linux on the ARM or 386 architectures, please note change 38 <a href="http://golang.org/change/55ac276af5a7">55ac276af5a7</a> 39 that fixes <a href="http://golang.org/issue/5949">issue 5949</a>. 40 </p> 41 42 <h2 id="go1">go1 (released 2012/03/28)</h2> 43 44 <p> 45 Go 1 is a major release of Go that will be stable in the long term. 46 Read the <a href="/doc/go1.html">Go 1 Release Notes</a> for more information. 47 </p> 48 49 <p> 50 It is intended that programs written for Go 1 will continue to compile and run 51 correctly, unchanged, under future versions of Go 1. 52 Read the <a href="/doc/go1compat.html">Go 1 compatibility document</a> for more 53 about the future of Go 1. 54 </p> 55 56 <p> 57 The go1 release corresponds to 58 <code><a href="weekly.html#2012-03-27">weekly.2012-03-27</a></code>. 59 </p> 60 61 <h3 id="go1.minor">Minor revisions</h3> 62 63 <p> 64 go1.0.1 (released 2012/04/25) was issued to 65 <a href="https://code.google.com/p/go/source/detail?r=a890477d3dfb">fix</a> an 66 <a href="https://code.google.com/p/go/issues/detail?id=3545">escape analysis 67 bug</a> that can lead to memory corruption. 68 It also includes several minor code and documentation fixes. 69 </p> 70 71 <p> 72 go1.0.2 (released 2012/06/13) was issued to fix two bugs in the implementation 73 of maps using struct or array keys: 74 <a href="http://code.google.com/p/go/issues/detail?id=3695">issue 3695</a> and 75 <a href="http://code.google.com/p/go/issues/detail?id=3573">issue 3573</a>. 76 It also includes many minor code and documentation fixes. 77 </p> 78 79 <p> 80 go1.0.3 (released 2012/09/21) includes minor code and documentation fixes. 81 </p> 82 83 <p> 84 See the <a href="http://code.google.com/p/go/source/list?name=release-branch.go1">go1 release branch history</a> for the complete list of changes. 85 </p> 86 87 <h2 id="r60">r60 (released 2011/09/07)</h2> 88 89 <p> 90 The r60 release corresponds to 91 <code><a href="weekly.html#2011-08-17">weekly.2011-08-17</a></code>. 92 This section highlights the most significant changes in this release. 93 For a more detailed summary, see the 94 <a href="weekly.html#2011-08-17">weekly release notes</a>. 95 For complete information, see the 96 <a href="http://code.google.com/p/go/source/list?r=release-branch.r60">Mercurial change list</a>. 97 </p> 98 99 <h3 id="r60.lang">Language</h3> 100 101 <p> 102 An "else" block is now required to have braces except if the body of the "else" 103 is another "if". Since gofmt always puts those braces in anyway, 104 gofmt-formatted programs will not be affected. 105 To fix other programs, run gofmt. 106 </p> 107 108 <h3 id="r60.pkg">Packages</h3> 109 110 <p> 111 <a href="/pkg/http/">Package http</a>'s URL parsing and query escaping code 112 (such as <code>ParseURL</code> and <code>URLEscape</code>) has been moved to 113 the new <a href="/pkg/url/">url package</a>, with several simplifications to 114 the names. Client code can be updated automatically with gofix. 115 </p> 116 117 <p> 118 <a href="/pkg/image/">Package image</a> has had significant changes made to the 119 <code>Pix</code> field of struct types such as 120 <a href="/pkg/image/#RGBA">image.RGBA</a> and 121 <a href="/pkg/image/#NRGBA">image.NRGBA</a>. 122 The <a href="/pkg/image/#Image">image.Image</a> interface type has not changed, 123 though, and you should not need to change your code if you don't explicitly 124 refer to <code>Pix</code> fields. For example, if you decode a number of images 125 using the <a href="/pkg/image/jpeg/">image/jpeg</a> package, compose them using 126 <a href="/pkg/image/draw/">image/draw</a>, and then encode the result using 127 <a href="/pkg/img/png">image/png</a>, then your code should still work as 128 before. 129 If your code <i>does</i> refer to <code>Pix</code> fields see the 130 <a href="/doc/devel/weekly.html#2011-07-19">weekly.2011-07-19</a> 131 snapshot notes for how to update your code. 132 </p> 133 134 <p> 135 <a href="/pkg/template/">Package template</a> has been replaced with a new 136 templating package (formerly <code>exp/template</code>). The original template 137 package is still available as <a href="/pkg/old/template/">old/template</a>. 138 The <code>old/template</code> package is deprecated and will be removed. 139 The Go tree has been updated to use the new template package. We encourage 140 users of the old template package to switch to the new one. Code that uses 141 <code>template</code> or <code>exp/template</code> will need to change its 142 import lines to <code>"old/template"</code> or <code>"template"</code>, 143 respectively. 144 </p> 145 146 <h3 id="r60.cmd">Tools</h3> 147 148 <p> 149 <a href="/cmd/goinstall/">Goinstall</a> now uses a new tag selection scheme. 150 When downloading or updating, goinstall looks for a tag or branch with the 151 <code>"go."</code> prefix that corresponds to the local Go version. For Go 152 <code>release.r58</code> it looks for <code>go.r58</code>. For 153 <code>weekly.2011-06-03</code> it looks for <code>go.weekly.2011-06-03</code>. 154 If the specific <code>go.X</code> tag or branch is not found, it chooses the 155 closest earlier version. If an appropriate tag or branch is found, goinstall 156 uses that version of the code. Otherwise it uses the default version selected 157 by the version control system. Library authors are encouraged to use the 158 appropriate tag or branch names in their repositories to make their libraries 159 more accessible. 160 </p> 161 162 <h3 id="r60.minor">Minor revisions</h3> 163 164 <p> 165 r60.1 includes a 166 <a href="http://code.google.com/p/go/source/detail?r=1824581bf62d">linker 167 fix</a>, a pair of 168 <a href="http://code.google.com/p/go/source/detail?r=9ef4429c2c64">goplay</a> 169 <a href="http://code.google.com/p/go/source/detail?r=d42ed8c3098e">fixes</a>, 170 and a <code>json</code> package 171 <a href="http://code.google.com/p/go/source/detail?r=d5e97874fe84">fix</a> and 172 a new 173 <a href="http://code.google.com/p/go/source/detail?r=4f0e6269213f">struct tag 174 option</a>. 175 </p> 176 177 <p> 178 r60.2 179 <a href="http://code.google.com/p/go/source/detail?r=ff19536042ac">fixes</a> 180 a memory leak involving maps. 181 </p> 182 183 <p> 184 r60.3 fixes a 185 <a href="http://code.google.com/p/go/source/detail?r=01fa62f5e4e5">reflect bug</a>. 186 </p> 187 188 <h2 id="r59">r59 (released 2011/08/01)</h2> 189 190 <p> 191 The r59 release corresponds to 192 <code><a href="weekly.html#2011-07-07">weekly.2011-07-07</a></code>. 193 This section highlights the most significant changes in this release. 194 For a more detailed summary, see the 195 <a href="weekly.html#2011-07-07">weekly release notes</a>. 196 For complete information, see the 197 <a href="http://code.google.com/p/go/source/list?r=release-branch.r59">Mercurial change list</a>. 198 </p> 199 200 <h3 id="r59.lang">Language</h3> 201 202 <p> 203 This release includes a language change that restricts the use of 204 <code>goto</code>. In essence, a <code>goto</code> statement outside a block 205 cannot jump to a label inside that block. Your code may require changes if it 206 uses <code>goto</code>. 207 See <a href="http://code.google.com/p/go/source/detail?r=dc6d3cf9279d">this 208 changeset</a> for how the new rule affected the Go tree. 209 </p> 210 211 <h3 id="r59.pkg">Packages</h3> 212 213 <p> 214 As usual, <a href="/cmd/gofix/">gofix</a> will handle the bulk of the rewrites 215 necessary for these changes to package APIs. 216 </p> 217 218 <p> 219 <a href="/pkg/http">Package http</a> has a new 220 <a href="/pkg/http/#FileSystem">FileSystem</a> interface that provides access 221 to files. The <a href="/pkg/http/#FileServer">FileServer</a> helper now takes a 222 <code>FileSystem</code> argument instead of an explicit file system root. By 223 implementing your own <code>FileSystem</code> you can use the 224 <code>FileServer</code> to serve arbitrary data. 225 </p> 226 227 <p> 228 <a href="/pkg/os/">Package os</a>'s <code>ErrorString</code> type has been 229 hidden. Most uses of <code>os.ErrorString</code> can be replaced with 230 <a href="/pkg/os/#NewError">os.NewError</a>. 231 </p> 232 233 <p> 234 <a href="/pkg/reflect/">Package reflect</a> supports a new struct tag scheme 235 that enables sharing of struct tags between multiple packages. 236 In this scheme, the tags must be of the form: 237 </p> 238 <pre> 239 `key:"value" key2:"value2"` 240 </pre> 241 <p> 242 The <a href="/pkg/reflect/#StructField">StructField</a> type's Tag field now 243 has type <a href="/pkg/reflect/#StructTag">StructTag</a>, which has a 244 <code>Get</code> method. Clients of <a href="/pkg/json">json</a> and 245 <a href="/pkg/xml">xml</a> will need to be updated. Code that says 246 </p> 247 <pre> 248 type T struct { 249 X int "name" 250 } 251 </pre> 252 <p> 253 should become 254 </p> 255 <pre> 256 type T struct { 257 X int `json:"name"` // or `xml:"name"` 258 } 259 </pre> 260 <p> 261 Use <a href="/cmd/govet/">govet</a> to identify struct tags that need to be 262 changed to use the new syntax. 263 </p> 264 265 <p> 266 <a href="/pkg/sort/">Package sort</a>'s <code>IntArray</code> type has been 267 renamed to <a href="/pkg/sort/#IntSlice">IntSlice</a>, and similarly for 268 <a href="/pkg/sort/#Float64Slice">Float64Slice</a> and 269 <a href="/pkg/sort/#StringSlice">StringSlice</a>. 270 </p> 271 272 <p> 273 <a href="/pkg/strings/">Package strings</a>'s <code>Split</code> function has 274 itself been split into <a href="/pkg/strings/#Split">Split</a> and 275 <a href="/pkg/strings/#SplitN">SplitN</a>. 276 <code>SplitN</code> is the same as the old <code>Split</code>. 277 The new <code>Split</code> is equivalent to <code>SplitN</code> with a final 278 argument of -1. 279 </p> 280 281 <a href="/pkg/image/draw/">Package image/draw</a>'s 282 <a href="/pkg/image/draw/#Draw">Draw</a> function now takes an additional 283 argument, a compositing operator. 284 If in doubt, use <a href="/pkg/image/draw/#Op">draw.Over</a>. 285 </p> 286 287 <h3 id="r59.cmd">Tools</h3> 288 289 <p> 290 <a href="/cmd/goinstall/">Goinstall</a> now installs packages and commands from 291 arbitrary remote repositories (not just Google Code, Github, and so on). 292 See the <a href="/cmd/goinstall/">goinstall documentation</a> for details. 293 </p> 294 295 <h2 id="r58">r58 (released 2011/06/29)</h2> 296 297 <p> 298 The r58 release corresponds to 299 <code><a href="weekly.html#2011-06-09">weekly.2011-06-09</a></code> 300 with additional bug fixes. 301 This section highlights the most significant changes in this release. 302 For a more detailed summary, see the 303 <a href="weekly.html#2011-06-09">weekly release notes</a>. 304 For complete information, see the 305 <a href="http://code.google.com/p/go/source/list?r=release-branch.r58">Mercurial change list</a>. 306 </p> 307 308 <h3 id="r58.lang">Language</h3> 309 310 <p> 311 This release fixes a <a href="http://code.google.com/p/go/source/detail?r=b720749486e1">use of uninitialized memory in programs that misuse <code>goto</code></a>. 312 </p> 313 314 <h3 id="r58.pkg">Packages</h3> 315 316 <p> 317 As usual, <a href="/cmd/gofix/">gofix</a> will handle the bulk of the rewrites 318 necessary for these changes to package APIs. 319 </p> 320 321 <p> 322 <a href="/pkg/http/">Package http</a> drops the <code>finalURL</code> return 323 value from the <a href="/pkg/http/#Client.Get">Client.Get</a> method. The value 324 is now available via the new <code>Request</code> field on <a 325 href="/pkg/http/#Response">http.Response</a>. 326 Most instances of the type map[string][]string in have been 327 replaced with the new <a href="/pkg/http/#Values">Values</a> type. 328 </p> 329 330 <p> 331 <a href="/pkg/exec/">Package exec</a> has been redesigned with a more 332 convenient and succinct API. 333 </p> 334 335 <p> 336 <a href="/pkg/strconv/">Package strconv</a>'s <a href="/pkg/strconv/#Quote">Quote</a> 337 function now escapes only those Unicode code points not classified as printable 338 by <a href="/pkg/unicode/#IsPrint">unicode.IsPrint</a>. 339 Previously Quote would escape all non-ASCII characters. 340 This also affects the <a href="/pkg/fmt/">fmt</a> package's <code>"%q"</code> 341 formatting directive. The previous quoting behavior is still available via 342 strconv's new <a href="/pkg/strconv/#QuoteToASCII">QuoteToASCII</a> function. 343 </p> 344 345 <p> 346 <a href="/pkg/os/signal/">Package os/signal</a>'s 347 <a href="/pkg/os/#Signal">Signal</a> and 348 <a href="/pkg/os/#UnixSignal">UnixSignal</a> types have been moved to the 349 <a href="/pkg/os/">os</a> package. 350 </p> 351 352 <p> 353 <a href="/pkg/image/draw/">Package image/draw</a> is the new name for 354 <code>exp/draw</code>. The GUI-related code from <code>exp/draw</code> is now 355 located in the <a href="/pkg/exp/gui/">exp/gui</a> package. 356 </p> 357 358 <h3 id="r58.cmd">Tools</h3> 359 360 <p> 361 <a href="/cmd/goinstall/">Goinstall</a> now observes the GOPATH environment 362 variable to build and install your own code and external libraries outside of 363 the Go tree (and avoid writing Makefiles). 364 </p> 365 366 <h3 id="go1.2.minor">Minor revisions</h3> 367 368 <p> 369 go1.2.1 (released 2014/03/02) includes bug fixes to the <code>runtime</code>, <code>net</code>, and <code>database/sql</code> packages. 370 See the <a href="https://code.google.com/p/go/source/list?name=release-branch.go1.2&r=7ada9e760ce34e78aee5b476c9621556d0fa5d31">change history</a> for details. 371 </p> 372 373 <h3 id="r58.minor">Minor revisions</h3> 374 375 <p>r58.1 adds 376 <a href="http://code.google.com/p/go/source/detail?r=293c25943586">build</a> and 377 <a href="http://code.google.com/p/go/source/detail?r=bf17e96b6582">runtime</a> 378 changes to make Go run on OS X 10.7 Lion. 379 </p> 380 381 <h2 id="r57">r57 (released 2011/05/03)</h2> 382 383 <p> 384 The r57 release corresponds to 385 <code><a href="weekly.html#2011-04-27">weekly.2011-04-27</a></code> 386 with additional bug fixes. 387 This section highlights the most significant changes in this release. 388 For a more detailed summary, see the 389 <a href="weekly.html#2011-04-27">weekly release notes</a>. 390 For complete information, see the 391 <a href="http://code.google.com/p/go/source/list?r=release-branch.r57">Mercurial change list</a>. 392 </p> 393 394 <p>The new <a href="/cmd/gofix">gofix</a> tool finds Go programs that use old APIs and rewrites them to use 395 newer ones. After you update to a new Go release, gofix helps make the 396 necessary changes to your programs. Gofix will handle the http, os, and syscall 397 package changes described below, and we will update the program to keep up with 398 future changes to the libraries. 399 Gofix can’t 400 handle all situations perfectly, so read and test the changes it makes before 401 committing them. 402 See <a href="http://blog.golang.org/2011/04/introducing-gofix.html">the gofix blog post</a> for more 403 information.</p> 404 405 <h3 id="r57.lang">Language</h3> 406 407 <p> 408 <a href="/doc/go_spec.html#Receive_operator">Multiple assignment syntax</a> replaces the <code>closed</code> function. 409 The syntax for channel 410 receives allows an optional second assigned value, a boolean value 411 indicating whether the channel is closed. This code: 412 </p> 413 414 <pre> 415 v := <-ch 416 if closed(ch) { 417 // channel is closed 418 } 419 </pre> 420 421 <p>should now be written as:</p> 422 423 <pre> 424 v, ok := <-ch 425 if !ok { 426 // channel is closed 427 } 428 </pre> 429 430 <p><a href="/doc/go_spec.html#Label_scopes">Unused labels are now illegal</a>, just as unused local variables are.</p> 431 432 <h3 id="r57.pkg">Packages</h3> 433 434 <p> 435 <a href="/pkg/gob/">Package gob</a> will now encode and decode values of types that implement the 436 <a href="/pkg/gob/#GobEncoder">GobEncoder</a> and 437 <a href="/pkg/gob/#GobDecoder">GobDecoder</a> interfaces. This allows types with unexported 438 fields to transmit self-consistent descriptions; examples include 439 <a href="/pkg/big/#Int.GobDecode">big.Int</a> and <a href="/pkg/big/#Rat.GobDecode">big.Rat</a>. 440 </p> 441 442 <p> 443 <a href="/pkg/http/">Package http</a> has been redesigned. 444 For clients, there are new 445 <a href="/pkg/http/#Client">Client</a> and <a href="/pkg/http/#Transport">Transport</a> 446 abstractions that give more control over HTTP details such as headers sent 447 and redirections followed. These abstractions make it easy to implement 448 custom clients that add functionality such as <a href="http://code.google.com/p/goauth2/source/browse/oauth/oauth.go">OAuth2</a>. 449 For servers, <a href="/pkg/http/#ResponseWriter">ResponseWriter</a> 450 has dropped its non-essential methods. 451 The Hijack and Flush methods are no longer required; 452 code can test for them by checking whether a specific value implements 453 <a href="/pkg/http/#Hijacker">Hijacker</a> or <a href="/pkg/http/#Flusher">Flusher</a>. 454 The RemoteAddr and UsingTLS methods are replaced by <a href="/pkg/http/#Request">Request</a>'s 455 RemoteAddr and TLS fields. 456 The SetHeader method is replaced by a Header method; 457 its result, of type <a href="/pkg/http/#Header">Header</a>, 458 implements Set and other methods. 459 </p> 460 461 <p> 462 <a href="/pkg/net/">Package net</a> 463 drops the <code>laddr</code> argument from <a href="/pkg/net/#Conn.Dial">Dial</a> 464 and drops the <code>cname</code> return value 465 from <a href="/pkg/net/#LookupHost">LookupHost</a>. 466 The implementation now uses <a href="/cmd/cgo/">cgo</a> to implement 467 network name lookups using the C library getaddrinfo(3) 468 function when possible. This ensures that Go and C programs 469 resolve names the same way and also avoids the OS X 470 application-level firewall. 471 </p> 472 473 <p> 474 <a href="/pkg/os/">Package os</a> 475 introduces simplified <a href="/pkg/os/#File.Open">Open</a> 476 and <a href="/pkg/os/#File.Create">Create</a> functions. 477 The original Open is now available as <a href="/pkg/os/#File.OpenFile">OpenFile</a>. 478 The final three arguments to <a href="/pkg/os/#Process.StartProcess">StartProcess</a> 479 have been replaced by a pointer to a <a href="/pkg/os/#ProcAttr">ProcAttr</a>. 480 </p> 481 482 <p> 483 <a href="/pkg/reflect/">Package reflect</a> has been redesigned. 484 <a href="/pkg/reflect/#Type">Type</a> is now an interface that implements 485 all the possible type methods. 486 Instead of a type switch on a Type <code>t</code>, switch on <code>t.Kind()</code>. 487 <a href="/pkg/reflect/#Value">Value</a> is now a struct value that 488 implements all the possible value methods. 489 Instead of a type switch on a Value <code>v</code>, switch on <code>v.Kind()</code>. 490 Typeof and NewValue are now called <a href="/pkg/reflect/#Type.TypeOf">TypeOf</a> and <a href="/pkg/reflect/#Value.ValueOf">ValueOf</a> 491 To create a writable Value, use <code>New(t).Elem()</code> instead of <code>Zero(t)</code>. 492 See <a href="http://code.google.com/p/go/source/detail?r=843855f3c026">the change description</a> 493 for the full details. 494 The new API allows a more efficient implementation of Value 495 that avoids many of the allocations required by the previous API. 496 </p> 497 498 <p> 499 Remember that gofix will handle the bulk of the rewrites 500 necessary for these changes to package APIs. 501 </p> 502 503 <h3 id="r57.cmd">Tools</h3> 504 505 <p><a href="/cmd/gofix/">Gofix</a>, a new command, is described above.</p> 506 507 <p> 508 <a href="/cmd/gotest/">Gotest</a> is now a Go program instead of a shell script. 509 The new <code>-test.short</code> flag in combination with package testing's Short function 510 allows you to write tests that can be run in normal or “short” mode; 511 all.bash runs tests in short mode to reduce installation time. 512 The Makefiles know about the flag: use <code>make testshort</code>. 513 </p> 514 515 <p> 516 The run-time support now implements CPU and memory profiling. 517 Gotest's new 518 <a href="/cmd/gotest/"><code>-test.cpuprofile</code> and 519 <code>-test.memprofile</code> flags</a> make it easy to 520 profile tests. 521 To add profiling to your web server, see the <a href="/pkg/http/pprof/">http/pprof</a> 522 documentation. 523 For other uses, see the <a href="/pkg/runtime/pprof/">runtime/pprof</a> documentation. 524 </p> 525 526 <h3 id="r57.minor">Minor revisions</h3> 527 528 <p>r57.1 fixes a <a href="http://code.google.com/p/go/source/detail?r=ff2bc62726e7145eb2ecc1e0f076998e4a8f86f0">nil pointer dereference in http.FormFile</a>.</p> 529 <p>r57.2 fixes a <a href="http://code.google.com/p/go/source/detail?r=063b0ff67d8277df03c956208abc068076818dae">use of uninitialized memory in programs that misuse <code>goto</code></a>.</p> 530 531 <h2 id="r56">r56 (released 2011/03/16)</h2> 532 533 <p> 534 The r56 release was the first stable release and corresponds to 535 <code><a href="weekly.html#2011-03-07">weekly.2011-03-07.1</a></code>. 536 The numbering starts at 56 because before this release, 537 what we now consider weekly snapshots were called releases. 538 </p>