The Go Programming Language turns two
10 Nov 2011
Tags: appengine, community, gopher

Andrew Gerrand

* Introduction

Two years ago a small team at Google went public with their fledgling project -
the Go Programming Language.
They presented a language spec, two compilers,
a modest standard library, some novel tools,
and plenty of accurate (albeit succinct) documentation.
They watched with excitement as programmers around the world began to play with Go.
The team continued to iterate and improve on what they had built,
and were gradually joined by dozens - and then hundreds - of programmers
from the open source community.
The Go Authors went on to produce lots of libraries,
new tools, and reams of [[https://golang.org/doc/docs.html][documentation]].
They celebrated a successful year in the public eye with a [[https://blog.golang.org/2010/11/go-one-year-ago-today.html][blog post]]
last November that concluded "Go is certainly ready for production use,
but there is still room for improvement.
Our focus for the immediate future is making Go programs faster and more
efficient in the context of high performance systems."

Today is the second anniversary of Go's release,
and Go is faster and more stable than ever.
Careful tuning of Go's code generators, concurrency primitives,
garbage collector, and core libraries have increased the performance of Go programs,
and native support for [[https://blog.golang.org/2011/06/profiling-go-programs.html][profiling]]
and [[http://blog.golang.org/2011/10/debugging-go-programs-with-gnu-debugger.html][debugging]]
makes it easier to detect and remove performance issues in user code.
Go is also now easier to learn with [[http://tour.golang.org/][A Tour of Go]],
an interactive tutorial you can take from the comfort of your web browser.

This year we introduced the experimental [[http://code.google.com/appengine/docs/go/][Go runtime]]
for Google's App Engine platform,
and we have been steadily increasing the Go runtime's support for App Engine's APIs.
Just this week we released [[http://code.google.com/appengine/downloads.html][version 1.6.0]]
of the Go App Engine SDK,
which includes support for [[http://code.google.com/appengine/docs/go/backends/overview.html][backends]]
(long-running processes),
finer control over datastore indexes, and various other improvements.
Today, the Go runtime is near feature parity with - and is a viable alternative
to - the Python and Java runtimes.
In fact, we now serve [[https://golang.org/][golang.org]] by running a version
of [[https://golang.org/cmd/godoc/][godoc]] on the App Engine service.

While 2010 was a year of discovery and experimentation,
2011 was a year of fine tuning and planning for the future.
This year we issued several "[[https://golang.org/doc/devel/release.html][release]]"
versions of Go that were more reliable and better supported than weekly snapshots.
We also introduced [[https://golang.org/cmd/gofix/][gofix]] to take the
pain out of migrating to newer releases.
Furthermore, last month we announced a [[https://blog.golang.org/2011/10/preview-of-go-version-1.html][plan for Go version 1]] -
a release that will be supported for years to come.
Work toward Go 1 is already underway and you can observe our progress by
the latest weekly snapshot at [[http://weekly.golang.org/pkg/][weekly.golang.org]].

The plan is to launch Go 1 in early 2012.
We hope to bring the Go App Engine runtime out of "experimental" status at the same time.

But that's not all. 2011 was an exciting year for the gopher, too.
He has manifested himself as a plush toy (a highly prized gift at Google
I/O and other Go talks) and in vinyl form (received by every attendee at
OSCON and now available at the [[http://www.googlestore.com/Fun/Go+Gopher+Figurine.axd][Google Store]]).

.image go-programming-language-turns-two_gophers.jpg

And, most surprisingly, at Halloween he made an appearance with his gopher girlfriend!

.image go-programming-language-turns-two_costume.jpg

Photograph by [[https://plus.google.com/106640494112897458359/posts][Chris Nokleberg]].
