# Go 1.4 is released
10 Dec 2014
Summary: Go 1.14 adds support for Android, go generate, optimizations, and more.

Andrew Gerrand
adg@golang.org

##

Today we announce Go 1.4, the fifth major stable release of Go, arriving six
months after our previous major release [Go 1.3](https://blog.golang.org/go1.3).
It contains a small language change, support for more operating systems
and processor architectures, and improvements to the tool chain and libraries.
As always, Go 1.4 keeps the promise of compatibility, and almost everything
will continue to compile and run without change when moved to 1.4.
For the full details, see the [Go 1.4 release notes](https://golang.org/doc/go1.4).

The most notable new feature in this release is official support for Android.
Using the support in the core and the libraries in the
[golang.org/x/mobile](https://godoc.org/golang.org/x/mobile) repository,
it is now possible to write simple Android apps using only Go code.
At this stage, the support libraries are still nascent and under heavy development.
Early adopters should expect a bumpy ride, but we welcome the community to get involved.

The language change is a tweak to the syntax of for-range loops.
You may now write "for range s {" to loop over each item from s,
without having to assign the value, loop index, or map key.
See the [release notes](https://golang.org/doc/go1.4#forrange) for details.

The go command has a new subcommand, go generate, to automate the running of
tools to generate source code before compilation.
For example, it can be used to automate the generation of String methods for
typed constants using the
[new stringer tool](https://godoc.org/golang.org/x/tools/cmd/stringer/).
For more information, see the [design document](https://golang.org/s/go1.4-generate).

Most programs will run about the same speed or slightly faster in 1.4 than in
1.3; some will be slightly slower.
There are many changes, making it hard to be precise about what to expect.
See the [release notes](https://golang.org/doc/go1.4#performance) for more discussion.

And, of course, there are many more improvements and bug fixes.

In case you missed it, a few weeks ago the sub-repositories were moved to new locations.
For example, the go.tools packages are now imported from "golang.org/x/tools".
See the [announcement post](https://groups.google.com/d/msg/golang-announce/eD8dh3T9yyA/HDOEU_ZSmvAJ) for details.

This release also coincides with the project's move from Mercurial to Git (for
source control), Rietveld to Gerrit (for code review), and Google Code to
Github (for issue tracking and wiki).
The move affects the core Go repository and its sub-repositories.
You can find the canonical Git repositories at
[go.googlesource.com](https://go.googlesource.com),
and the issue tracker and wiki at the
[golang/go GitHub repo](https://github.com/golang/go).

While development has already moved over to the new infrastructure,
for the 1.4 release we still recommend that users who
[install from source](https://golang.org/doc/install/source)
use the Mercurial repositories.

For App Engine users, Go 1.4 is now available for beta testing.
See [the announcement](https://groups.google.com/d/msg/google-appengine-go/ndtQokV3oFo/25wV1W9JtywJ) for details.

From all of us on the Go team, please enjoy Go 1.4, and have a happy holiday season.
