19 August 2015
Today the Go project is proud to release Go 1.5,
the sixth major stable release of Go.
This release includes significant changes to the implementation.
The compiler tool chain was translated from C to Go,
removing the last vestiges of C code from the Go code base.
The garbage collector was completely redesigned,
yielding a dramatic reduction
in garbage collection pause times.
Related improvements to the scheduler allowed us to change the default
(the number of concurrently executing goroutines)
from 1 to the number of logical CPUs.
Changes to the linker enable distributing Go packages as shared libraries to
link into Go programs, and building Go packages into archives or shared
libraries that may be linked into or loaded by C programs
The release also includes improvements to the developer tools.
Support for "internal" packages
permits sharing implementation details between packages.
Experimental support for "vendoring"
external dependencies is a step toward a standard mechanism for managing
dependencies in Go programs.
The new "go tool trace" command enables the
visualisation of program traces generated by new tracing infrastructure in the
The new "go doc"
command provides an improved command-line interface for viewing Go package documentation.
There are also several new operating system and architecture ports.
The more mature new ports are darwin/arm,
darwin/arm64 (Apple's iPhone and iPad devices),
There is also experimental support for ppc64 and ppc64le
(IBM 64-bit PowerPC, big and little endian).
The new darwin/arm64 port and external linking features fuel the
Go mobile project, an experiment to
see how Go might be used for building apps on Android and iOS devices.
(The Go mobile work itself is not part of this release.)
The only language change is very minor,
the lifting of a restriction in the map literal syntax
to make them more succinct and consistent with slice literals.
The standard library saw many additions and improvements, too.
The flag package now shows cleaner usage messages.
The math/big package now provides a Float
type for computing with arbitrary-precision floating point numbers.
An improvement to the DNS resolver on
Linux and BSD systems has removed the cgo requirement for programs that do name
The go/types package has been
moved to the standard library from
the golang.org/x/tools repository.
(The new go/constant and
go/importer packages are also a result
of this move.)
The reflect package has added the
FuncOf functions, analogous to the
existing SliceOf function.
And, of course, there is the usual
list of smaller fixes and improvements.
For the full story, see the detailed release notes.
Or if you just can't wait to get started,
head over to the downloads page to get Go 1.5 now.