# Go version 1 is released
28 Mar 2012
Tags: release, go1
Summary: A major milestone: announcing Go 1, the first stable version of Go.

Andrew Gerrand

##

.image go1/gophermega.jpg

Today marks a major milestone in the development of the Go programming language.
We're announcing Go version 1, or Go 1 for short,
which defines a language and a set of core libraries to provide a stable
foundation for creating reliable products,
projects, and publications.

Go 1 is the first release of Go that is available in supported binary distributions.
They are available for Linux, FreeBSD, Mac OS X and,
we are thrilled to announce, Windows.

The driving motivation for Go 1 is stability for its users.
People who write Go 1 programs can be confident that those programs will
continue to compile and run without change,
in many environments, on a time scale of years.
Similarly, authors who write books about Go 1 can be sure that their examples
and explanations will be helpful to readers today and into the future.

Forward compatibility is part of stability.
Code that compiles in Go 1 should, with few exceptions,
continue to compile and run throughout the lifetime of that version,
even as we issue updates and bug fixes such as Go version 1.1, 1.2, and so on.
The [Go 1 compatibility document](https://golang.org/doc/go1compat.html)
explains the compatibility guidelines in more detail.

Go 1 is a representation of Go as it is used today,
not a major redesign.
In its planning, we focused on cleaning up problems and inconsistencies
and improving portability.
There had long been many changes to Go that we had designed and prototyped
but not released because they were backwards-incompatible.
Go 1 incorporates these changes, which provide significant improvements
to the language and libraries but sometimes introduce incompatibilities for old programs.
Fortunately, the [go fix](https://golang.org/cmd/go/#Run_go_tool_fix_on_packages)
tool can automate much of the work needed to bring programs up to the Go 1 standard.

Go 1 introduces changes to the language (such as new types for [Unicode characters](https://golang.org/doc/go1.html#rune)
and [errors](https://golang.org/doc/go1.html#errors)) and the standard
library (such as the new [time package](https://golang.org/doc/go1.html#time)
and renamings in the [strconv package](https://golang.org/doc/go1.html#strconv)).
Also, the package hierarchy has been rearranged to group related items together,
such as moving the networking facilities,
for instance the [rpc package](https://golang.org/pkg/net/rpc/),
into subdirectories of net.
A complete list of changes is documented in the [Go 1 release notes](https://golang.org/doc/go1.html).
That document is an essential reference for programmers migrating code from
earlier versions of Go.

We also restructured the Go tool suite around the new [go command](https://golang.org/doc/go1.html#cmd_go),
a program for fetching, building, installing and maintaining Go code.
The go command eliminates the need for Makefiles to write Go code because
it uses the Go program source itself to derive the build instructions.
No more build scripts!

Finally, the release of Go 1 triggers a new release of the [Google App Engine SDK](https://developers.google.com/appengine/docs/go).
A similar process of revision and stabilization has been applied to the
App Engine libraries,
providing a base for developers to build programs for App Engine that will run for years.

Go 1 is the result of a major effort by the core Go team and our many contributors
from the open source community.
We thank everyone who helped make this happen.

There has never been a better time to be a Go programmer.
Everything you need to get started is at [golang.org](https://golang.org/).
