# Go 1.5 is released
19 Aug 2015
Summary: Go 1.15 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.
