# GopherCon 2014 Wrap Up
28 May 2014
Summary: Reporting from GopherCon 2014.

Andrew Gerrand
adg@golang.org

##

In April this year 700 gophers descended upon Denver to attend [GopherCon](http://www.gophercon.com/),
the world's first large-scale Go conference, organized entirely by the community.
The three day event featured 24 talks and one panel discussion in a single track over two days,
followed by an informal "hack day" full of code, conversation,
and more than 4 hours (!) of lightning talks.

.image gophercon/image02.jpg

A [complete set of video recordings](http://confreaks.com/events/gophercon2014) is now available
(the [slides are here](https://github.com/gophercon/2014-talks)).

Two keynotes framed the conference:

  - Rob Pike's opening talk ["Hello, Gophers!"](https://www.youtube.com/watch?v=VoS7DsT1rdM) ([slides](https://talks.golang.org/2014/hellogophers.slide))
    discusses the history of Go by walking through two of the first Go programs.
  - Andrew Gerrand's closing talk ["Go for gophers"](https://www.youtube.com/watch?v=dKGmK_Z1Zl0) ([slides](https://talks.golang.org/2014/go4gophers.slide)) explains
    the Go design philosophy through the lens of his personal experience learning the language.

One talk that resonated with members of the Go team was Peter Bourgon's
["Best practices for Production Environments"](https://www.youtube.com/watch?v=Y1-RLAl7iOI)
([notes](http://peter.bourgon.org/go-in-production/)).
From deployment to dependency management,
it answers many frequently asked questions about Go use in the real world
and is a must-see for anyone serious about building systems in Go.

But, really, you should just [watch them all](http://confreaks.com/events/gophercon2014).
They're great.

The Go Gopher was everywhere.
Each attendee received one of the new pink and purple gophers,
which now accompany the original blue one:

.image gophercon/image01.jpg

The gopher was also seen wearing a cape on the side of the incredible [CoreOS](https://coreos.com/) bus:

.image gophercon/image00.jpg

Most of the Go team were at the conference,
and we were moved by the passion and dedication of the Go community.
It was a thrill to see the many different ways people are using the language.
It was also great to put faces to many of the names we know well through their contributions to the project.

We would like to extend our thanks and congratulations to the GopherCon
organizers (Brian Ketelsen and Erik St.
Martin), the excellent speakers, and the tireless volunteers that pitched
in to make the event such a success.
We look forward to GopherCon 2015, which promises to be bigger and better still.

But if you really can't wait, we'll see you at [dotGo](http://www.dotgo.eu/) in Paris on the 10th of October!
