# Go 1.2 is released
1 Dec 2013
Tags: release
Summary: Go 1.2 adds test coverage results, goroutine preemption, and more.

Andrew Gerrand

##

We are pleased to announce the release of Go 1.2, the latest stable version of
the Go Programming Language.

Binary distributions may be downloaded from the
[usual place](https://golang.org/doc/install) or if you prefer to
[compile from source](https://golang.org/doc/install/source) you should use
the `release` or `go1.2` tags.

This new release comes nearly seven months after the release of Go 1.1 in May,
a much shorter period than the 14 months between 1.1 and 1.0.
We anticipate a comparable interval between future major releases.

[Go 1.2](https://golang.org/doc/go1.2) includes a couple of minor
language changes, several improvements to the language implementation and
tools, some performance improvements, and many additions and
(backward-compatible) changes to the standard library.

Please read the [release notes](https://golang.org/doc/go1.2) for all
the details, as some changes may affect the behavior of existing (buggy) programs.
What follows is the highlights of the release.

A new [three-index slice syntax](https://golang.org/doc/go1.2#three_index)
adds the ability to specify capacity as well as length. This allows the
programmer to pass a slice value that can only access a limited portion of the
underlying array, a technique that previously required the use of the unsafe
package.

A major new feature of the tool chain is the facility to compute and display
[test coverage results](https://golang.org/doc/go1.2#cover).
See the [`go test`](https://golang.org/cmd/go/#hdr-Description_of_testing_flags)
and [cover tool](https://godoc.org/code.google.com/p/go.tools/cmd/cover/)
documentation for details. Later this week we will publish an article that
discusses this new feature in detail.

Goroutines are now [pre-emptively scheduled](https://golang.org/doc/go1.2#preemption),
in that the scheduler is invoked occasionally upon entry to a function.
This can prevent busy goroutines from starving other goroutines on the same
thread.

An increase to the default goroutine stack size should improve the
performance of some programs. (The old size had a tendency to introduce
expensive stack-segment switching in performance-critical sections.)
On the other end, new restrictions on
[stack sizes](https://golang.org/doc/go1.2#stack_size) and
[the number of operating system threads](https://golang.org/doc/go1.2#thread_limit)
should prevent misbehaving programs from consuming all the resources of a
machine. (These limits may be adjusted using new functions in the
[`runtime/debug` package](https://golang.org/pkg/runtime/debug).)

Finally, among the [many changes to the standard library](https://golang.org/doc/go1.2#library),
significant changes include
the new [`encoding` package](https://golang.org/doc/go1.2#encoding),
[indexed arguments](https://golang.org/doc/go1.2#fmt_indexed_arguments) in `Printf` format strings, and
some [convenient additions](https://golang.org/doc/go1.2#text_template) to the template packages.

As part of the release, the [Go Playground](http://play.golang.org/) has been
updated to Go 1.2. This also affects services that use the Playground, such as
[the Go Tour](http://tour.golang.org/) and this blog.
The update also adds the ability to use threads and the `os`, `net`, and
`unsafe` packages inside the sandbox, making it more like a real Go environment.

To everyone who helped make this release possible, from the many users who
submitted bug reports to the 116 (!) contributors who committed more than 1600
changes to the core: Your help is invaluable to the project. Thank you!

_This blog post is the first of the_
[Go Advent Calendar](http://blog.gopheracademy.com/day-01-go-1.2),
_a series of daily articles presented by the_
[Gopher Academy](http://gopheracademy.com/) _from December 1 to 25._
