1
0
mirror of https://github.com/golang/go synced 2024-11-20 09:34:52 -07:00
go/doc/go1.tmpl
Rob Pike 9d59c40eab doc/go1: document rearranged package hierarchy
Some exciting HTML and CSS here.

R=remyoudompheng, rsc, r
CC=golang-dev
https://golang.org/cl/5460047
2011-12-08 11:35:28 -08:00

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>