| --- |
| title: Go 1.5 is released |
| date: 2015-08-19 |
| by: |
| - Andrew Gerrand |
| summary: Go 1.5 adds a new, much faster garbage collector, more parallelism by default, go tool trace, and more. |
| --- |
| |
| |
| 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](/doc/go1.5#c), |
| removing the last vestiges of C code from the Go code base. |
| The garbage collector was [completely redesigned](/doc/go1.5#gc), |
| yielding a [dramatic reduction](/talks/2015/go-gc.pdf) |
| in garbage collection pause times. |
| Related improvements to the scheduler allowed us to change the default |
| [GOMAXPROCS](/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](/s/execmodes)). |
| |
| The release also includes [improvements to the developer tools](/doc/go1.5#go_command). |
| Support for ["internal" packages](/s/go14internal) |
| permits sharing implementation details between packages. |
| [Experimental support](/s/go15vendor) for "vendoring" |
| external dependencies is a step toward a standard mechanism for managing |
| dependencies in Go programs. |
| The new "[go tool trace](/cmd/trace/)" command enables the |
| visualisation of program traces generated by new tracing infrastructure in the |
| runtime. |
| The new "[go doc](/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](/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](/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](/doc/go1.5#flag). |
| The math/big package now provides a [Float](/pkg/math/big/#Float) |
| type for computing with arbitrary-precision floating point numbers. |
| An [improvement](/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](/pkg/go/types/) package has been |
| [moved](/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](/pkg/go/constant/) and |
| [go/importer](/pkg/go/importer/) packages are also a result |
| of this move.) |
| The reflect package has added the |
| [ArrayOf](/pkg/reflect/#ArrayOf) and |
| [FuncOf](/pkg/reflect/#FuncOf) functions, analogous to the |
| existing [SliceOf](/pkg/reflect/#SliceOf) function. |
| And, of course, there is the usual |
| [list of smaller fixes and improvements](/doc/go1.5#minor_library_changes). |
| |
| For the full story, see the [detailed release notes](/doc/go1.5). |
| Or if you just can't wait to get started, |
| head over to the [downloads page](/dl/) to get Go 1.5 now. |