mirror of
https://github.com/golang/go
synced 2024-11-23 01:40:03 -07:00
cd2e2f60e7
Change-Id: Ied305480f22b60767c4628e5a31236ac01eafc86 Reviewed-on: https://go-review.googlesource.com/11825 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
735 lines
27 KiB
HTML
735 lines
27 KiB
HTML
<!--{
|
|
"Title": "Go 1.5 Release Notes",
|
|
"Path": "/doc/go1.5",
|
|
"Template": true
|
|
}-->
|
|
|
|
|
|
<h2 id="introduction">Introduction to Go 1.5</h2>
|
|
|
|
<p>
|
|
The latest Go release, version 1.5,
|
|
is a significant release, including major architectural changes to the implementation.
|
|
Despite that, we expect almost all Go programs to continue to compile and run as before,
|
|
because the release still maintains the Go 1 <a href="/doc/go1compat.html">promise
|
|
of compatibility</a>.
|
|
</p>
|
|
|
|
<p>
|
|
The biggest developments in the implementation are:
|
|
</p>
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
The compiler and runtime are now written entirely in Go (with a little assembler).
|
|
C is no longer involved in the implementation, and so the C compiler that was
|
|
once necessary for building the distribution is gone.
|
|
</li>
|
|
|
|
<li>
|
|
The garbage collector is now <a href="/s/go14gc">concurrent</a> and provides dramatically lower
|
|
pause times by running, when possible, in parallel with other goroutines.
|
|
</li>
|
|
|
|
<li>
|
|
By default, Go programs run with <code>GOMAXPROCS</code> set to the
|
|
number of cores available; in prior releases it defaulted to 1.
|
|
</li>
|
|
|
|
<li>
|
|
Support for <a href="http://golang.org/s/go14internal">internal packages</a>
|
|
is now provided for all repositories, not just the Go core.
|
|
</li>
|
|
|
|
<li>
|
|
The <code>go</code> command now provides <a href="/s/go15vendor">experimental
|
|
support</a> for "vendoring" external dependencies.
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<p>
|
|
These and a number of other changes to the implementation and tools
|
|
are discussed below.
|
|
</p>
|
|
|
|
<p>
|
|
The release also contains one small language change involving map literals.
|
|
</p>
|
|
|
|
<p>
|
|
Finally, the timing of the <a href="/s/releasesched">release</a>
|
|
strays from the usual six-month interval,
|
|
both to provide more time to prepare this major release and to shift the schedule thereafter to
|
|
time the release dates more conveniently.
|
|
</p>
|
|
|
|
<h2 id="language">Changes to the language</h2>
|
|
|
|
<h3 id="mapliterals">Map literals</h3>
|
|
|
|
<p>
|
|
Due to an oversight, the rule that allowed the element type to be elided from slice literals was not
|
|
applied to map keys.
|
|
This has been <a href="/cl/2591">corrected</a> in Go 1.5.
|
|
An example will make this clear: as of Go 1.5, this map literal,
|
|
</p>
|
|
|
|
<pre>
|
|
m := map[Point]string{
|
|
Point{29.935523, 52.891566}: "Persepolis",
|
|
Point{-25.352594, 131.034361}: "Uluru",
|
|
Point{37.422455, -122.084306}: "Googleplex",
|
|
}
|
|
</pre>
|
|
|
|
<p>
|
|
may be written as follows, without the <code>Point</code> type listed explicitly:
|
|
</p>
|
|
|
|
<pre>
|
|
m := map[Point]string{
|
|
{29.935523, 52.891566}: "Persepolis",
|
|
{-25.352594, 131.034361}: "Uluru",
|
|
{37.422455, -122.084306}: "Googleplex",
|
|
}
|
|
</pre>
|
|
|
|
<h2 id="implementation">The Implementation</h2>
|
|
|
|
<h3 id="c">No more C</h3>
|
|
|
|
<p>
|
|
The compiler and runtime are now implemented in Go and assembler, without C.
|
|
The only C source left in the tree is related to testing or to <code>cgo</code>.
|
|
There was a C compiler in the tree in 1.4 and earlier.
|
|
It was used to build the runtime; a custom compiler was necessary in part to
|
|
guarantee the C code would work with the stack management of goroutines.
|
|
Since the runtime is in Go now, there is no need for this C compiler and it is gone.
|
|
Details of the process to eliminate C are discussed <a href="/s/go13compiler">elsewhere</a>.
|
|
</p>
|
|
|
|
<p>
|
|
The conversion from C was done with the help of custom tools created for the job.
|
|
Most important, the compiler was actually moved by automatic translation of
|
|
the C code into Go.
|
|
It is in effect the same program in a different language.
|
|
It is not a new implementation
|
|
of the compiler so we expect the process will not have introduced new compiler
|
|
bugs.
|
|
An overview of this process is available in the slides for
|
|
<a href="https://talks.golang.org/2015/gogo.slide">this presentation</a>.
|
|
</p>
|
|
|
|
<h3 id="compiler">Compiler and tools</h3>
|
|
|
|
<p>
|
|
Independent of but encouraged by the move to Go, the names of the tools have changed.
|
|
The old names <code>6g</code>, <code>8g</code> and so on are gone; instead there
|
|
is just one binary, accessible as <code>go</code> <code>tool</code> <code>compile</code>,
|
|
that compiles Go source into binaries suitable for the architecture and operating system
|
|
specified by <code>$GOARCH</code> and <code>$GOOS</code>.
|
|
Similarly, there is now one linker (<code>go</code> <code>tool</code> <code>link</code>)
|
|
and one assembler (<code>go</code> <code>tool</code> <code>asm</code>).
|
|
The linker was translated automatically from the old C implementation,
|
|
but the assembler is a new native Go implementation discussed
|
|
in more detail below.
|
|
</p>
|
|
|
|
<p>
|
|
Similar to the drop of the names <code>6g</code>, <code>8g</code>, and so on,
|
|
the output of the compiler and assembler are now given a plain <code>.o</code> suffix
|
|
rather than <code>.8</code>, <code>.6</code>, etc.
|
|
</p>
|
|
|
|
|
|
<h3 id="gc">Garbage collector</h3>
|
|
|
|
<p>
|
|
TODO
|
|
</p>
|
|
|
|
<h3 id="runtime">Runtime</h3>
|
|
|
|
<p>
|
|
In Go 1.5, the order in which goroutines are scheduled has been changed.
|
|
The properties of the scheduler were never defined by the language,
|
|
but programs that depended on the scheduling order may be broken
|
|
by this change.
|
|
We have seen a few (erroneous) programs affected by this change.
|
|
If you have programs that implicitly depend on the scheduling
|
|
order, you will need to update them.
|
|
</p>
|
|
|
|
<p>
|
|
Another potentially breaking change is that the runtime now
|
|
sets the default number of threads to run simultaneously,
|
|
defined by <code>GOMAXPROCS</code>, to the number
|
|
of cores available on the CPU.
|
|
In prior releases it defaulted to 1.
|
|
Programs that do not expect to run with multiple cores may
|
|
break inadvertently.
|
|
They can be updated by removing the restriction or by setting
|
|
<code>GOMAXPROCS</code> explicitly.
|
|
</p>
|
|
|
|
<h3 id="build">Build</h3>
|
|
|
|
<p>
|
|
Now that the Go compiler and runtime are implemented in Go, a Go compiler
|
|
must be available to compile the distribution from source.
|
|
Thus, to build the Go core, a working Go distribution must already be in place.
|
|
(Go programmers who do not work on the core are unaffected by this change.)
|
|
Any Go 1.4 or later distribution (including <code>gccgo</code>) will serve.
|
|
For details, see the <a href="/s/go15bootstrap">design document</a>.
|
|
</p>
|
|
|
|
<h2 id="ports">Ports</h2>
|
|
|
|
<p>
|
|
Due mostly to the industry's move away the 32-bit x86 architecture,
|
|
the set of binary downloads provided is reduced in 1.5.
|
|
A distribution for the OS X operating system is provided only for the
|
|
<code>amd64</code> architecture, not <code>386</code>.
|
|
Similarly, the ports for Snow Leopard (Apple OS X 10.6) still work but are no
|
|
longer released as a download or maintained since Apple no longer maintains that version
|
|
of the operating system.
|
|
Also, the <code>dragonfly/386</code> port is no longer supported at all
|
|
because DragonflyBSD itself no longer supports the 32-bit 386 architecture.
|
|
</p>
|
|
|
|
<p>
|
|
There are however several new ports available to be built from source.
|
|
These include <code>darwin/arm</code> and <code>darwin/arm64</code>.
|
|
The new port <code>linux/arm64</code> is mostly in place, but <code>cgo</code>
|
|
is only supported using external linking.
|
|
</p>
|
|
|
|
<p>
|
|
On FreeBSD, Go 1.5 requires FreeBSD 8-STABLE+ because of its new use of the <code>SYSCALL</code> instruction.
|
|
</p>
|
|
|
|
<p>
|
|
On NaCl, Go 1.5 requires SDK version pepper-39 or above because it now uses the
|
|
<code>get_random_bytes</code> system call.
|
|
</p>
|
|
|
|
<h2 id="tools">Tools</h2>
|
|
|
|
<pre>
|
|
build: external linking support for windows (https://golang.org/cl/7163, 7282, 7283, 7284, 7534, 7535)
|
|
cmd/cover: tool now lives in the standard repository (https://golang.org/cl/9560)
|
|
cmd/gc: constant arithmetic is based on math/big (https://golang.org/cl/7830, 7851, 7857, 8426, 7858, 7912, 8171)
|
|
cmd/go, go/build: add ${SRCDIR} variable expansion to cgo lines (https://golang.org/cl/1756)
|
|
cmd/go: add $DOLLAR to generate's variables (https://golang.org/cl/8091)
|
|
cmd/go: std wildcard now excludes commands in main repo (https://golang.org/cl/5550)
|
|
cmd/go: .swig/.swigcxx files now require SWIG 3.0.6 or later
|
|
cmd/go: add -run flag to go generate (https://golang.org/cl/9005)
|
|
cmd/go: add $GOLINE to generate's variables (https://golang.org/cl/9007)
|
|
cmd/go: add go doc (https://golang.org/cl/9227)
|
|
cmd/go: internal enforced even outside standard library (golang.org/s/go14internal; https://golang.org/cl/9156)
|
|
cmd/go, testing: add go test -count (https://golang.org/cl/10669)
|
|
cmd/go: add preliminary support for vendor directories (https://golang.org/cl/10923)
|
|
cmd/vet: better validation of struct tags (https://golang.org/cl/2685)
|
|
cmd/ld: no longer record build timestamp in Windows PE file header (https://golang.org/cl/3740)
|
|
cmd/go: add -toolexec build option
|
|
cmd/go: drop -ccflags build option
|
|
cmd/go: add -asmflags build option
|
|
cmd/go: add -buildmode build option
|
|
cmd/gc: add -dynlink option (for amd64 only)
|
|
cmd/ld: add -buildmode option
|
|
cmd/trace: new command to view traces (https://golang.org/cl/3601)
|
|
|
|
Assembler:
|
|
|
|
New cmd/asm tool (now use go tool asm, not go tool 6a)
|
|
|
|
Assembler now supports -dynlink option.
|
|
|
|
ARM assembly syntax has had some features removed.
|
|
|
|
- mentioning SP or PC as a hardware register
|
|
These are always pseudo-registers except that in some contexts
|
|
they're not, and it's confusing because the context should not affect
|
|
which register you mean. Change the references to the hardware
|
|
registers to be explicit: R13 for SP, R15 for PC.
|
|
- constant creation using assignment
|
|
The files say a=b when they could instead say #define a b.
|
|
There is no reason to have both mechanisms.
|
|
- R(0) to refer to R0.
|
|
Some macros use this to a great extent. Again, it's easy just to
|
|
use a #define to rename a register.
|
|
|
|
Also expression evaluation now uses uint64s instead of signed integers and the
|
|
precedence of operators is now Go-like rather than C-like.
|
|
</pre>
|
|
|
|
<h2 id="performance">Performance</h2>
|
|
|
|
<pre>
|
|
|
|
cmd/gc: evaluate concrete == interface without allocating (https://golang.org/cl/2096)
|
|
cmd/gc: optimize memclr of slices and arrays (https://golang.org/cl/2520)
|
|
cmd/gc: transform closure calls to function calls (https://golang.org/cl/4050)
|
|
cmd/gc: transitive inlining (https://golang.org/cl/5952)
|
|
cmd/gc, runtime: speed up some cases of _, ok := i.(T) (https://golang.org/cl/7697)
|
|
cmd/gc: speed up large string switches (https://golang.org/cl/7698)
|
|
cmd/gc: inline x := y.(*T) and x, ok := y.(*T) (https://golang.org/cl/7862)
|
|
cmd/gc: allocate backing storage for non-escaping interfaces on stack (https://golang.org/cl/8201)
|
|
encoding/xml: avoid an allocation for tags without attributes (https://golang.org/cl/4160)
|
|
image: many optimizations
|
|
runtime: add ARM runtime.cmpstring and bytes.Compare (https://golang.org/cl/8010)
|
|
runtime: do not scan maps when k/v do not contain pointers (https://golang.org/cl/3288)
|
|
runtime: reduce thrashing of gs between ps (https://golang.org/cl/9872)
|
|
sort: number of Sort performance optimizations (https://golang.org/cl/2100, https://golang.org/cl/2614, ...)
|
|
strconv: optimize decimal to string conversion (https://golang.org/cl/2105)
|
|
strconv: optimize float to string conversion (https://golang.org/cl/5600)
|
|
sync: add active spinning to Mutex (https://golang.org/cl/5430)
|
|
math/big: faster assembly kernels for amd64 and 386 (https://golang.org/cl/2503, https://golang.org/cl/2560)
|
|
math/big: faster "pure Go" kernels for platforms w/o assembly kernels (https://golang.org/cl/2480)
|
|
regexp: port RE2's bitstate backtracker to the regexp package (https://golang.org/cl/2153)
|
|
</pre>
|
|
|
|
<h3 id="library">Core library</h3>
|
|
|
|
<h3 id="flag">Flag</h3>
|
|
|
|
<p>
|
|
The flag package's
|
|
<a href="/pkg/flag/#PrintDefaults"><code>PrintDefaults</code></a>
|
|
function, and method on <a href="/pkg/flag/#FlagSet"><code>FlagSet</code></a>,
|
|
have been modified to create nicer usage messages.
|
|
The format has been changed to be more human-friendly and in the usage
|
|
messages a word quoted with `backquotes` is taken to be the name of the
|
|
flag's operand to display in the usage message.
|
|
For instance, a flag created with the invocation,
|
|
</p>
|
|
|
|
<pre>
|
|
cpuFlag = flag.Int("cpu", 1, "run `N` processes in parallel")
|
|
</pre>
|
|
|
|
<p>
|
|
will show the help message,
|
|
</p>
|
|
|
|
<pre>
|
|
-cpu N
|
|
run N processes in parallel (default 1)
|
|
</pre>
|
|
|
|
<p>
|
|
Also, the default is now listed only when it is not the zero value for the type.
|
|
</p>
|
|
|
|
<h3 id="math_big">Floats in math/big</h3>
|
|
|
|
<p>
|
|
The <a href="/pkg/math/big/"><code>math/big</code></a> package
|
|
has a new, fundamental data type,
|
|
<a href="/pkg/math/big/#Float"><code>Float</code></a>,
|
|
which implements arbitrary-precision floating-point numbers.
|
|
A <code>Float</code> value is represented by a boolean sign,
|
|
a variable-length mantissa, and a 32-bit fixed-size signed exponent.
|
|
The precision of a <code>Float</code> (the mantissa size in bits)
|
|
can be specified explicitly or is otherwise determined by the first
|
|
operation that creates the value.
|
|
Once created, the size of a <code>Float</code>'s mantissa may be modified with the
|
|
<a href="/pkg/math/big/#Float.SetPrec"><code>SetPrec</code></a> method.
|
|
<code>Floats</code> support the concept of infinities, such as are created by
|
|
overflow, but values that would lead to the equivalent of IEEE 754 NaNs
|
|
trigger a panic.
|
|
<code>Float</code> operations support all IEEE-754 rounding modes.
|
|
When the precision is set to 24 (53) bits,
|
|
operations that stay within the range of normalized <code>float32</code>
|
|
(<code>float64</code>)
|
|
values produce the same results as the corresponding IEEE-754
|
|
arithmetic on those values.
|
|
</p>
|
|
|
|
<h3 id="go_types">Go types</h3>
|
|
|
|
<p>
|
|
The <a href="/pkg/go/types/"><code>go/types</code></a> package
|
|
up to now has been maintained in the <code>golang.org/x</code>
|
|
repository; as of Go 1.5 it has been relocated to the main repository.
|
|
The code at the old location is now deprecated.
|
|
There is also a modest API change in the package, discussed below.
|
|
</p>
|
|
|
|
<p>
|
|
Associated with this move, the
|
|
<a href="/pkg/go/constant/"><code>go/constant</code></a>
|
|
package also moved to the main repository;
|
|
it was <code>golang.org/x/tools/exact</code> before.
|
|
The <a href="/pkg/go/importer/"><code>go/importer</code></a> package
|
|
also moved to the main repository,
|
|
as well as some tools described above.
|
|
</p>
|
|
|
|
<h3 id="net">Net</h3>
|
|
|
|
<p>
|
|
The DNS resolver in the net package has almost always used <code>cgo</code> to access
|
|
the system interface.
|
|
A change in Go 1.5 means that on most Unix systems DNS resolution
|
|
will no longer require <code>cgo</code>, which simplifies execution
|
|
on those platforms.
|
|
Now, if the system's networking configuration permits, the native Go resolver
|
|
will suffice.
|
|
The important effect of this change is that each DNS resolution occupies a goroutine
|
|
rather than a thread,
|
|
so a program with multiple outstanding DNS requests will consume fewer operating
|
|
system resources.
|
|
</p>
|
|
|
|
<p>
|
|
The decision of how to run the resolver applies at run time, not build time.
|
|
The <code>netgo</code> build tag that has been used to enforce the use
|
|
of the Go resolver is no longer necessary, although it still works.
|
|
</p>
|
|
|
|
<p>
|
|
This change applies to Unix systems only.
|
|
Windows, Mac OS X, and Plan 9 systems behave as before.
|
|
</p>
|
|
|
|
<h3 id="reflect">Reflect</h3>
|
|
|
|
<p>
|
|
The <a href="/pkg/reflect/"><code>reflect</code></a> package
|
|
has two new functions: <a href="/pkg/reflect/#ArrayOf"><code>ArrayOf</code></a>
|
|
and <a href="/pkg/reflect/#FuncOf"><code>FuncOf</code></a>.
|
|
These functions, analogous to the extant
|
|
<a href="/pkg/reflect/#SliceOf"><code>SliceOf</code></a> function,
|
|
create new types at runtime to describe arrays and functions.
|
|
</p>
|
|
|
|
<h3 id="hardening">Hardening</h3>
|
|
|
|
<p>
|
|
Several dozen bugs were found in the standard library
|
|
through randomized testing with the
|
|
<a href="https://github.com/dvyukov/go-fuzz"><code>go-fuzz</code></a> tool.
|
|
Bugs were fixed in the
|
|
<a href="/pkg/archive/tar/"><code>archive/tar</code></a>,
|
|
<a href="/pkg/archive/zip/"><code>archive/zip</code></a>,
|
|
<a href="/pkg/compress/flate/"><code>compress/flate</code></a>,
|
|
<a href="/pkg/encoding/gob/"><code>encoding/gob</code></a>,
|
|
<a href="/pkg/fmt/"><code>fmt</code></a>,
|
|
<a href="/pkg/html/template/"><code>html/template</code></a>,
|
|
<a href="/pkg/image/gif/"><code>image/gif</code></a>,
|
|
<a href="/pkg/image/jpeg/"><code>image/jpeg</code></a>,
|
|
<a href="/pkg/image/png/"><code>image/png</code></a>, and
|
|
<a href="/pkg/text/template/"><code>text/template</code></a>,
|
|
packages.
|
|
The fixes harden the implementation against incorrect and malicious inputs.
|
|
</p>
|
|
|
|
<h3 id="minor_library_changes">Minor changes to the library</h3>
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
The <a href="/pkg/archive/zip/"><code>archive/zip</code></a> package's
|
|
<a href="/pkg/archive/zip/#Writer"><code>Writer</code></a> type now has a
|
|
<a href="/pkg/archive/zip/#Writer.SetOffset"><code>SetOffset</code></a>
|
|
method to specify the location within the output stream at which to write the archive.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/bufio/#Reader"><code>Reader</code></a> in the
|
|
<a href="/pkg/bufio/"><code>bufio</code></a> package now has a
|
|
<a href="/pkg/bufio/#Reader.Discard"><code>Discard</code></a>
|
|
method to discard data from the input.
|
|
</li>
|
|
|
|
<li>
|
|
Also in the <a href="/pkg/bytes/"><code>bytes</code></a> package,
|
|
the <a href="/pkg/bytes/#Buffer"><code>Buffer</code></a> type
|
|
now has a <a href="/pkg/bytes/#Buffer.Cap"><code>Cap</code></a> method
|
|
that reports the number of bytes allocated within the buffer.
|
|
Similarly, both the <a href="/pkg/bytes/"><code>bytes</code></a>
|
|
and <a href="/pkg/strings/"><code>strings</code></a> packages,
|
|
the <a href="/pkg/bytes/#Reader"><code>Reader</code></a>
|
|
type now has a <a href="/pkg/bytes/#Reader.Size"><code>Size</code></a>
|
|
method that reports the original length of the underlying slice or string.
|
|
</li>
|
|
|
|
<li>
|
|
Both the <a href="/pkg/bytes/"><code>bytes</code></a> and
|
|
<a href="/pkg/strings/"><code>strings</code></a> packages
|
|
also now have a <a href="/pkg/bytes/#LastIndexByte"><code>LastIndexByte</code></a>
|
|
function that locates the rightmost byte with that value in the argument.
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/cipher: clarify what will happen if len(src) != len(dst) for the Stream interface. (https://golang.org/cl/1754)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/cipher: support non-standard nonce lengths for GCM. (https://golang.org/cl/8946)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/elliptic: add Name field to CurveParams struct (https://golang.org/cl/2133)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/elliptic: Unmarshaling points now automatically checks that the point is on the curve (https://golang.org/cl/2421)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/tls: change default minimum version to TLS 1.0. (https://golang.org/cl/1791)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/tls: including Certificate Transparency SCTs in the handshake is now supported (https://golang.org/cl/8988)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/tls: session ticket keys can now be rotated at runtime (https://golang.org/cl/9072)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/tls: servers will now always call GetCertificate to pick a certificate for a connection when Certificates is empty (https://golang.org/cl/8792)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/x509: wildcards are now only accepted as the first label (https://golang.org/cl/5691)
|
|
</li>
|
|
|
|
<li>
|
|
TODO crypto/x509: unknown critical extensions now cause errors in Verify, not when parsing (https://golang.org/cl/9390)
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/database/sql/#DB"><code>DB</code></a> type of the
|
|
<a href="/pkg/database/sql/"><code>database/sql</code></a> package
|
|
now has a <a href="/pkg/database/sql/#DB.Stats"><code>Stats</code></a> method
|
|
to retrieve database statistics.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/encoding/base64/"><code>encoding/base64</code></a> package
|
|
now supports unpadded encodings through two new encoding variables,
|
|
<a href="/pkg/encoding/base64/#RawStdEncoding"><code>RawStdEncoding</code></a> and
|
|
<a href="/pkg/encoding/base64/#RawURLEncoding"><code>RawURLEncoding</code></a>.
|
|
</li>
|
|
|
|
<li>
|
|
Also in the <a href="/pkg/fmt/"><code>fmt</code></a> package,
|
|
a value of type <a href="/pkg/reflect/#Value"><code>Value</code></a> now
|
|
prints what it holds, rather than use the <code>reflect.Value</code>'s <code>Stringer</code>
|
|
method, which produces things like <code><int Value></code>.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/ast/#EmptyStmt"><code>EmptyStmt</code></a> type
|
|
in the <a href="/pkg/go/ast/"><code>go/ast</code></a> package now
|
|
has a boolean <code>Implicit</code> field that records whether the
|
|
semicolon was implicitly added or was present in the source.
|
|
</li>
|
|
|
|
<li>
|
|
For forward compatibility the <a href="/pkg/go/build/"><code>go/build</code></a> package
|
|
reserves <code>GOARCH</code> values for a number of architectures that Go might support one day.
|
|
This is not a promise that it will.
|
|
</li>
|
|
|
|
<li>
|
|
The (newly migrated) <a href="/pkg/go/types/"><code>go/types</code></a>
|
|
package allows one to control the prefix attached to package-level names using
|
|
the new <a href="/pkg/go/types/#Qualifier"><code>Qualifier</code></a>
|
|
function type as an argument to several functions. This is an API change for
|
|
the package, but since it is new to the core, it is not breaking the Go 1 compatibility
|
|
rules since code that uses the package must explicitly ask for it at its new location.
|
|
TODO: There should be a gofix for this.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/io/"><code>io</code></a> package
|
|
adds a <a href="/pkg/io/#CopyBuffer"><code>CopyBuffer</code></a> function
|
|
that is like <a href="/pkg/io/#Copy"><code>Copy</code></a> but
|
|
uses a caller-provided buffer, permitting control of allocation and buffer size.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/log/"><code>log</code></a> package
|
|
has a new <a href="/pkg/log/#LUTC"><code>LUTC</code></a> flag
|
|
that causes time stamps to be printed in the UTC time zone.
|
|
It also adds a <a href="/pkg/log/#SetOutput"><code>SetOutput</code></a> function
|
|
to set the output destination for the standard logger
|
|
and a corresponding method for user-created loggers.
|
|
</li>
|
|
|
|
<li>
|
|
In Go 1.4, <a href="/pkg/math/#Max"><code>Max</code></a> was not detecting all possible NaN bit patterns.
|
|
This is fixed in Go 1.5, so programs that use <code>math.Max</code> on data including NaNs may behave differently,
|
|
but now correctly according to the IEEE754 definition of NaNs.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/math/big/"><code>math/big</code></a> package
|
|
adds a new <a href="/pkg/math/big/#Jacobi"><code>Jacobi</code></a>
|
|
function for integers and a new method
|
|
<a href="/pkg/math/big/#Int.ModSqrt"><code>ModSqrt</code></a>
|
|
method for the <a href="/pkg/math/big/#Int"><code>Int</code></a> type.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/mime/"><code>mime</code></a> package adds an
|
|
<a href="/pkg/mime/#ExtensionsByType"><code>ExtensionsByType</code></a>
|
|
function that returns the MIME extensions know to be associated with a given MIME type.
|
|
</li>
|
|
|
|
<li>
|
|
There is a new <a href="/pkg/mime/quotedprintable/"><code>mime/quotedprintable</code></a>
|
|
package that implements the quoted-printable encoding defined by RFC 2045.
|
|
</li>
|
|
|
|
<li>
|
|
Go 1.5's <a href="/pkg/net/"><code>net</code></a> package
|
|
adds RFC-6555-compliant dialing for sites with multiple TCP
|
|
addresses listed in DNS.
|
|
A new <code>DualStack</code> field
|
|
in <a href="/pkg/net/#Dialer"><code>Dialer</code></a> enables the feature.
|
|
</li>
|
|
|
|
<li>
|
|
A number of inconsistencies in the types returned by errors in the
|
|
<a href="/pkg/net/"><code>net</code></a> package have been
|
|
tidied up.
|
|
Most now return an
|
|
<a href="/pkg/net/#OpError"><code>OpError</code></a> value
|
|
with more information than before.
|
|
Also, the <a href="/pkg/net/#OpError"><code>OpError</code></a>
|
|
type now includes a <code>Source</code> field that holds the local
|
|
network address.
|
|
</li>
|
|
|
|
<li>
|
|
TODO net: add SocketConn, SocketPacketConn (https://golang.org/cl/9275)
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/net/http/"><code>net/http</code></a> package now
|
|
has support for setting trailers from a server <a href="/pkg/net/http/#Handler"><code>Handler</code></a>.
|
|
For details, see the documentation for
|
|
<a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>.
|
|
</li>
|
|
|
|
<li>
|
|
Also in the <a href="/pkg/net/http/"><code>net/http</code></a> package,
|
|
there is code to ignore the zero <a href="/pkg/time/#Time"><code>Time</code></a> value
|
|
in the <a href="/pkg/net/#ServeContent"><code>ServeContent</code></a> function.
|
|
As of Go 1.5, it now also ignores a time value equal to the Unix epoch.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/net/http/cgi/"><code>net/http/cgi</code></a> package
|
|
had a bug that mishandled the values of the environment variables
|
|
<code>REMOTE_ADDR</code> ad <code>REMOTE_HOST</code>.
|
|
This has been fixed.
|
|
Also, starting with Go 1.5 the package sets the <code>REMOTE_PORT</code>
|
|
variable.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/net/mail/"><code>net/mail</code></a> package
|
|
adds a <a href="/pkg/net/mail/#AddressParser"><code>AddressParser</code></a>
|
|
type that can parse mail addresses.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/net/smtp/"><code>net/smtp</code></a> package
|
|
now has a <a href="/pkg/net/smtp/#Client.TLSConnectionState"><code>TLSConnectionState</code></a>
|
|
accessor to the <a href="/pkg/net/smtp/#Client"><code>Client</code></a>
|
|
type that returns the client's TLS state.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/os/"><code>os</code></a> package
|
|
has a new <a href="/pkg/os/#LookupEnv"><code>LookupEnv</code></a> function
|
|
that is similar to <a href="/pkg/os/#Getenv"><code>Getenv</code></a>
|
|
but can distinguish between an empty environment variable and a missing one.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/os/signal/"><code>os/signal</code></a> package
|
|
adds new <a href="/pkg/os/signal/#Ignore"><code>Ignore</code></a> and
|
|
<a href="/pkg/os/signal/#Reset"><code>Reset</code></a> functions.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/runtime/pprof/"><code>runtime/pprof</code></a> package
|
|
by default now includes overall memory statistics in all memory profiles.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/strings/"><code>strings</code></a> package
|
|
has a new <a href="/pkg/strings/#Compare"><code>Compare</code></a> function.
|
|
This is present to provide symmetry with the <a href="/pkg/bytes/"><code>bytes</code></a> package
|
|
but is otherwise unnecessary as strings support comparison natively.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/sync/#WaitGroup"><code>WaitGroup</code></a> function in
|
|
package <a href="/pkg/sync/"><code>sync</code></a>
|
|
now diagnoses code that races a call to <a href="/pkg/sync/#WaitGroup.Add"><code>Add</code></a>
|
|
against a return from <a href="/pkg/sync/#WaitGroup.Wait"><code>Wait</code></a>.
|
|
If it detects this condition, <code>WaitGroup</code> panics.
|
|
</li>
|
|
|
|
<li>
|
|
In the <a href="/pkg/syscall/"><code>syscall</code></a> package,
|
|
the Linux <code>SysProcAttr</code> struct now has a
|
|
<code>GidMappingsEnableSetgroups</code> field, made necessary
|
|
by security changes in Linux 3.19.
|
|
On all Unix systems, the struct also has new <code>Foreground</code> and <code>Pgid</code> fields
|
|
to provide more control when exec'ing.
|
|
On Darwin, there is now a <code>Syscall9</code> function
|
|
to support calls with too many arguments.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/testing/quick/"><code>testing/quick</code></a> will now
|
|
generate <code>nil</code> values for pointer types,
|
|
making it possible to use with recursive data structures.
|
|
Also, the package now supports generation of array types.
|
|
</li>
|
|
|
|
<li>
|
|
In the <a href="/pkg/text/template/"><code>text/template</code></a> and
|
|
<a href="/pkg/html/template/"><code>html/template</code></a> packages,
|
|
integer constants too large to be represented as a Go integer now trigger a
|
|
parse error. Before, they were silently converted to floating point, losing
|
|
precision.
|
|
</li>
|
|
|
|
<li>
|
|
Also in the <a href="/pkg/text/template/"><code>text/template</code></a> and
|
|
<a href="/pkg/html/template/"><code>html/template</code></a> packages,
|
|
a new <a href="/pkg/text/template/#Option"><code>Option</code></a> type
|
|
allows customization of the behavior of the template during execution.
|
|
The sole implemented option allows control over how a missing key is
|
|
handled when indexing a map.
|
|
The default, which can now be overridden, is as before: to continue with an invalid value.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/time/"><code>time</code></a> package's
|
|
<code>Time</code> type has a new method
|
|
<a href="/pkg/time/#Time.AppendFormat"><code>AppendFormat</code></a>,
|
|
which can be used to avoid allocation when printing a time value.
|
|
</li>
|
|
|
|
<li>
|
|
The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated
|
|
support throughout the system has been upgraded from version 7.0 to
|
|
<a href="http://www.unicode.org/versions/Unicode8.0.0/">Unicode 8.0</a>.
|
|
</li>
|
|
|
|
</ul>
|