# Go at Google I/O and Gopher SummerFest
6 Oct 2014
Tags: conference, io, report
Summary: Reporting from Google I/O 2014 and the GoSF Go SummerFest.

Francesc Campoy

## Introduction

The week of June 23rd was a good week for gophers in San Francisco. Go was a big
part of [Google I/O](https://www.google.com/events/io) on Wednesday and
Thursday, and on Monday we took advantage of the large gopher population to run
the [Go SummerFest](http://www.meetup.com/golangsf/events/170421402/), a
special instance of the [GoSF](http://www.meetup.com/golangsf) meetup. This
blog post is a recap of both events.

## Gopher SummerFest

.image io2014/summerfest.jpg _ 800

On the Monday, more than 200 gophers gathered at the Google office in San
Francisco to hear a series of talks:

  - The State of Go, ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVQm9tdncxWnJGUTQ/edit)
    and [video](http://www.hakkalabs.co/articles/state-go)) by Andrew Gerrand.
  - I was wrong, again! ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVTTUwS25qaFlzMGs/edit)
    and [video](http://www.hakkalabs.co/articles/why-we-use-go)), by Derek Collison.
  - Go at Splice ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVZklnNnJITlhSbXc/edit)), by Matt Aimonetti
  - Quick testing with quick ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVVElmOHpwamp4aTA/edit)), by Evan Shaw
  - Something about Go (no slides), by Blake Mizerany.

More comments and pictures from the event are available on the
[meetup event page](http://www.meetup.com/golangsf/events/170421402/).

## Go at Google I/O

On the Wednesday and Thursday, Go was at Google I/O in two different
formats: the Go booth in the sandbox area and the Go code labs available in the
code lab area and all around the world through
[I/O Extended](https://www.google.com/events/io/io-extended).

### The Go booth

.image io2014/booth.jpg _ 800

The Go booth was part of the Developer Sandbox area.

For the two days of the conference, some gophers from Google and other
companies gave a series of talks and demonstrations. The talks were not
recorded, but the slides and some screencasts and blog posts will be shared
soon.

  - Organizing Go Code, by David Crawshaw. ([slides](https://talks.golang.org/2014/organizeio.slide#1))
  - Testing Techniques, by Andrew Gerrand. ([video](https://www.youtube.com/watch?v=ndmB0bj7eyw)
    and [slides](https://talks.golang.org/2014/testing.slide#1))
  - Go for Java Developers, by Francesc Campoy. ([slides](https://talks.golang.org/2014/go4java.slide#1))
  - Camlistore: Android, ARM, App Engine, Everywhere,
    by Brad Fitzpatrick.
    ([slides](https://talks.golang.org/2014/camlistore.slide#1))
  - Go Compilation Complexities, by Ian Lance Taylor. ([slides](https://talks.golang.org/2014/compiling.slide#1))
  - SourceGraph: a Code Search Engine in Go,
    by Quinn Slack. ([video](https://youtu.be/-DpKaoPz8l8) and [slides](https://go-talks.appspot.com/github.com/sourcegraph/talks/google-io-2014/gio2014.slide#1))

We also organized Q&A sessions and lightning talks by members of the Go
community:

  - [Brad Rydzewski](https://twitter.com/bradrydzewski) talked about his project [drone.io](https://drone.io/).
  - [Barak Michener](https://twitter.com/barakmich) presented [Cayley](https://github.com/google/cayley),
    an open source graph database.
  - [Matt Aimonetti](https://twitter.com/mattetti) discussed how Go is used at [Splice](https://splice.com/).
  - [Sugu Sougoumarane](https://twitter.com/ssougou) talked about how [vitess](https://github.com/youtube/vitess) solved
    scalability problems at YouTube.
    ([video](https://youtu.be/midJ6b1LkA0))

### The Go code lab

This year attendees of Google I/O had a code lab area with self-service
computers where they could sit and learn Go. The code labs were also available
to anyone through the Google I/O extended brand. You can try it yourself at
[io2014codelabs.appspot.com](https://io2014codelabs.appspot.com/).

.image io2014/collage.jpg _ 800

## Conclusion

Thanks to the organizers, speakers, and attendees who helped make these events a
great success. See you next year. (Or at [dotGo](http://dotgo.eu) this week!)
