mirror of
https://github.com/golang/go
synced 2024-11-20 09:34:52 -07:00
9d59c40eab
Some exciting HTML and CSS here. R=remyoudompheng, rsc, r CC=golang-dev https://golang.org/cl/5460047
218 lines
5.9 KiB
Cheetah
218 lines
5.9 KiB
Cheetah
<!-- Go 1 Release Notes -->
|
|
{{donotedit}}
|
|
|
|
<h2 id="introduction">Introduction to Go 1</h2>
|
|
|
|
<p>
|
|
For a full explanation of the motivation and design of Go 1, see XXX.
|
|
Here follows a summary.
|
|
</p>
|
|
|
|
<p>
|
|
Go 1 is intended to be a stable language and core library set that
|
|
will form a reliable foundation for people and organizations that
|
|
want to make a long-term commitment to developing in the Go programming
|
|
language. Go will continue to develop, but in a way that guarantees
|
|
code written to the Go 1 specification will continue to work. For
|
|
instance, Go 1 will be a supported platform on Google App Engine
|
|
for the next few years. Incompatible changes to the environment,
|
|
should they arise, will be done in a distinct version.
|
|
</p>
|
|
|
|
<p>
|
|
This document describes the changes in the language and libraries
|
|
in Go 1, relative to the previous release, r60 (at the time of
|
|
writing, tagged as r60.3). It also explains how to update code at
|
|
r60 to compile and run under Go 1. Finally, it outlines the new
|
|
<code>go</code> command for building Go programs and the new binary
|
|
release process being introduced. Most of these topics have more
|
|
thorough presentations elsewhere; such documents are linked below.
|
|
|
|
<h2 id="language">Changes to the language</h2>
|
|
|
|
<h3 id="append">Append</h3>
|
|
|
|
<h3 id="close">Close</h3>
|
|
|
|
<h3 id="literals">Composite literals</h3>
|
|
|
|
<h3 id="init">Goroutines during init</h3>
|
|
|
|
<h3 id="rune">The rune type</h3>
|
|
|
|
<h3 id="delete">Deleting from maps</h3>
|
|
|
|
<p>
|
|
The original syntax for deleting an element in a map was:
|
|
</p>
|
|
|
|
<pre>
|
|
m[x] = ignored, false
|
|
</pre>
|
|
|
|
<p>
|
|
In Go 1, that syntax has gone; instead there is a new built-in
|
|
function, <code>delete</code>. The call
|
|
</p>
|
|
|
|
{{code "progs/go1.go" `/delete\(m, k\)/`}}
|
|
|
|
<p>
|
|
will delete the map entry retrieved by the expression <code>m[k]</code>.
|
|
There is no return value. Deleting a non-existent entry is a no-op.
|
|
</p>
|
|
|
|
<p>
|
|
<em>Updating</em>:
|
|
Gofix will convert expressions of the form <code>m[k] = ignored,
|
|
false</code> into <code>delete(m, k)</code> when it is clear that
|
|
the ignored value can be safely discarded from the program and
|
|
<code>false</code> refers to the predefined boolean constant. Gofix
|
|
will flag other uses of the syntax for inspection by the programmer.
|
|
</p>
|
|
|
|
<h3 id="map_iteration">Iterating in maps</h3>
|
|
|
|
<h3 id="multiple_assignment">Multiple assignment</h3>
|
|
|
|
<h3 id="shadowing">Returns and shadowed variables</h3>
|
|
|
|
<h3 id="equality">Equality of structs and arrays</h3>
|
|
|
|
<h2 id="library">Changes to the library</h2>
|
|
|
|
<h3 id="hierarchy">The package hierarchy</h3>
|
|
|
|
<p>
|
|
Go 1 has a rearranged package hierarchy that groups related items
|
|
into subdirectories. For instance, <code>utf8</code> and
|
|
<code>utf16</code> now occupy subdirectories of <code>unicode</code>.
|
|
Also, <a href="#subrepo">some packages</a> have moved into
|
|
subrepositories of
|
|
<a href="http://code.google.com/p/go"><code>code.google.com/p/go</code></a>
|
|
while <a href="#deleted">others</a> have been deleted outright.
|
|
</p>
|
|
|
|
<table class="codetable" frame="border" summary="Moved packages">
|
|
<colgroup align="left" width="60%"></colgroup>
|
|
<colgroup align="left" width="40%"></colgroup>
|
|
<tr>
|
|
<th align="left">Old path</th>
|
|
<th align="left">New path</th>
|
|
</tr>
|
|
<tr><td>asn1</td> <td>encoding/asn1</td></tr>
|
|
<tr><td>csv</td> <td>encoding/csv</td></tr>
|
|
<tr><td>gob</td> <td>encoding/gob</td></tr>
|
|
<tr><td>json</td> <td>encoding/json</td></tr>
|
|
<tr><td>xml</td> <td>encoding/xml</td></tr>
|
|
<tr>
|
|
<td colspan="2"><hr></td>
|
|
</tr>
|
|
<tr><td>exp/template/html</td> <td>html/template</td></tr>
|
|
<tr>
|
|
<td colspan="2"><hr></td>
|
|
</tr>
|
|
<tr><td>big</td> <td>math/big</td></tr>
|
|
<tr><td>cmath</td> <td>math/cmplx</td></tr>
|
|
<tr><td>rand</td> <td>math/rand</td></tr>
|
|
<tr>
|
|
<td colspan="2"><hr></td>
|
|
</tr>
|
|
<tr><td>http</td> <td>net/http</td></tr>
|
|
<tr><td>http/cgi</td> <td>net/http/cgi</td></tr>
|
|
<tr><td>http/fcgi</td> <td>net/http/fcgi</td></tr>
|
|
<tr><td>http/httptest</td> <td>net/http/httptest</td></tr>
|
|
<tr><td>http/pprof</td> <td>net/http/pprof</td></tr>
|
|
<tr><td>mail</td> <td>net/mail</td></tr>
|
|
<tr><td>rpc</td> <td>net/rpc</td></tr>
|
|
<tr><td>rpc/jsonrpc</td> <td>net/rpc/jsonrpc</td></tr>
|
|
<tr><td>smtp</td> <td>net/smtp</td></tr>
|
|
<tr><td>url</td> <td>net/url</td></tr>
|
|
<tr>
|
|
<td colspan="2"><hr></td>
|
|
</tr>
|
|
<tr><td>exec</td> <td>os/exec</td></tr>
|
|
<tr>
|
|
<td colspan="2"><hr></td>
|
|
</tr>
|
|
<tr><td>scanner</td> <td>text/scanner</td></tr>
|
|
<tr><td>tabwriter</td> <td>text/tabwriter</td></tr>
|
|
<tr><td>template</td> <td>text/template</td></tr>
|
|
<tr><td>template/parse</td> <td>text/template/parse</td></tr>
|
|
<tr>
|
|
<td colspan="2"><hr></td>
|
|
</tr>
|
|
<tr><td>utf8</td> <td>unicode/utf8</td></tr>
|
|
<tr><td>utf16</td> <td>unicode/utf16</td></tr>
|
|
</table>
|
|
|
|
<p>
|
|
Note that the package names for the old <code>cmath</code> and
|
|
<code>exp/template/html</code> packages have changed to <code>cmplx</code>
|
|
and <code>template</code>.
|
|
</p>
|
|
|
|
<p>
|
|
<em>Updating</em>:
|
|
Gofix will update all imports and package renames for packages that
|
|
remain inside the standard repository. Programs that import packages
|
|
that are no longer in the standard repository will need to be edited
|
|
by hand.
|
|
<font color="red">TODO: should warn about deletions.</font>
|
|
<font color="red">TODO: should also handle packages that move to subrepos.</font>
|
|
</p>
|
|
|
|
<h3 id="errors">The error type</h3>
|
|
|
|
<h3 id="errno">System call errors</h3>
|
|
|
|
<h3 id="time">Time</h3>
|
|
|
|
<h3 id="html">The html package</h3>
|
|
|
|
<h3 id="http">The http package</h3>
|
|
|
|
<h3 id="strconv">The strconv package</h3>
|
|
|
|
<h3 id="exp">The package tree exp</h3>
|
|
|
|
<h3 id="old">The package tree old</h3>
|
|
|
|
<h3 id="deleted">Deleted packages</h3>
|
|
|
|
<!--
|
|
|
|
moving to exp/* (and thus not in Go 1):
|
|
ebnf, command ebnflint
|
|
go/types, command gotype
|
|
http/spdy
|
|
|
|
deleted:
|
|
container/vector
|
|
exp/datafmt
|
|
go/typechecker
|
|
try, command gotry
|
|
|
|
go/typechecker
|
|
go/types
|
|
ebnf (and cmd/ebnflint)
|
|
container/vector
|
|
try (and gotry)
|
|
exp/datafmt
|
|
netchan
|
|
-->
|
|
|
|
<h3 id="subrepo">Packages moving to subrepositories</h3>
|
|
|
|
<!--
|
|
crypto/openpgp to XXX
|
|
maybe exp/ssh?
|
|
-->
|
|
|
|
<h3 id="os_fileinfo">The os.FileInfo type</h3>
|
|
|
|
<h2 id="go_command">The go command</h2>
|
|
|
|
<h2 id="releases">Packaged releases</h2>
|
|
|