# Go 1.5 is released
19 Aug 2015
Summary: Go 1.5 adds a new, much faster garbage collector, more parallelism by default, go tool trace, and more.

Andrew Gerrand
adg@golang.org

##

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](https://golang.org/doc/go1.5#c),
removing the last vestiges of C code from the Go code base.
The garbage collector was [completely redesigned](https://golang.org/doc/go1.5#gc),
yielding a [dramatic reduction](https://talks.golang.org/2015/go-gc.pdf)
in garbage collection pause times.
Related improvements to the scheduler allowed us to change the default
[GOMAXPROCS](https://golang.org/pkg/runtime/#GOMAXPROCS) value
(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
([design doc](https://golang.org/s/execmodes)).

The release also includes [improvements to the developer tools](https://golang.org/doc/go1.5#go_command).
Support for ["internal" packages](https://golang.org/s/go14internal)
permits sharing implementation details between packages.
[Experimental support](https://golang.org/s/go15vendor) for "vendoring"
external dependencies is a step toward a standard mechanism for managing
dependencies in Go programs.
The new "[go tool trace](https://golang.org/cmd/trace/)" command enables the
visualisation of  program traces generated by new tracing infrastructure in the
runtime.
The new "[go doc](https://golang.org/cmd/go/#hdr-Show_documentation_for_package_or_symbol)"
command provides an improved command-line interface for viewing Go package documentation.

There are also several [new operating system and architecture ports](https://golang.org/doc/go1.5#ports).
The more mature new ports are darwin/arm,
darwin/arm64 (Apple's iPhone and iPad devices),
and linux/arm64.
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](https://godoc.org/golang.org/x/mobile), 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](https://golang.org/doc/go1.5#language)
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](https://golang.org/doc/go1.5#flag).
The math/big package now provides a [Float](https://golang.org/pkg/math/big/#Float)
type for computing with arbitrary-precision floating point numbers.
An [improvement](https://golang.org/doc/go1.5#net) to the DNS resolver on
Linux and BSD systems has removed the cgo requirement for programs that do name
lookups.
The [go/types](https://golang.org/pkg/go/types/) package has been
[moved](https://golang.org/doc/go1.5#go_types) to the standard library from
the [golang.org/x/tools](https://godoc.org/golang.org/x/tools) repository.
(The new [go/constant](https://golang.org/pkg/go/constant/) and
[go/importer](https://golang.org/pkg/go/importer/) packages are also a result
of this move.)
The reflect package has added the
[ArrayOf](https://golang.org/pkg/reflect/#ArrayOf) and
[FuncOf](https://golang.org/pkg/reflect/#FuncOf) functions, analogous to the
existing [SliceOf](https://golang.org/pkg/reflect/#SliceOf) function.
And, of course, there is the usual
[list of smaller fixes and improvements](https://golang.org/doc/go1.5#minor_library_changes).

For the full story, see the [detailed release notes](https://golang.org/doc/go1.5).
Or if you just can't wait to get started,
head over to the [downloads page](https://golang.org/dl/) to get Go 1.5 now.
