# Go at Google I/O 2011: videos
23 May 2011
Tags: appengine, gopher, talk, video
Summary: Two talks about Go from Google I/O 2011.
OldURL: /go-at-google-io-2011-videos

Andrew Gerrand

## Introduction

The Go team had a great time at Google I/O 2011.
It was a pleasure to meet so many programmers who share our enthusiasm for Go,
and to share our work of the past few months.
For those of you that couldn’t be there in person,
you can now watch videos of our two Go presentations on YouTube.

## Writing Web Apps in Go

In “[Writing Web Apps in Go](http://www.youtube.com/watch?v=-i0hat7pdpk)”
we announce the [Go runtime for Google App Engine](https://blog.golang.org/2011/05/go-and-google-app-engine.html)
and walk through the development and deployment of [Moustachio](http://moustach-io.appspot.com/),
the first Go App Engine app.

.iframe //www.youtube.com/embed/-i0hat7pdpk 349 560

(See the [presentation slides](https://golang.org/doc/talks/io2011/Writing_Web_Apps_in_Go.pdf).)

The [source code](https://code.google.com/p/appengine-go/source/browse/example/moustachio)
for Moustachio is available as part of [the SDK](http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go)
along with some other examples,
such as this [Mandelbrot demo](http://mandelbrot-tiles.appspot.com/).

Most important, this talk features the debut of the plush gopher.

.image io2011/gopher.jpg

For those that didn’t get one at the conference, we hope to make him available for purchase online soon.

## Real World Go

“[Real World Go](http://www.youtube.com/watch?v=7QDVRowyUQA)”,
presented at [I/O Bootcamp](http://io-bootcamp.com),
gives a brief introduction to Go and four case studies of its use in solving real problems:
- [Heroku](http://heroku.com) with [Doozer](https://github.com/ha/doozerd),
  a highly available consistent data store,

  - [MROffice Dialer](http://mroffice.org/telephony.html), a VOIP system for call centers,

  - [Atlassian](http://www.atlassian.com)’s virtual machine cluster management system,

  - [Camlistore](http://www.camlistore.org), a content addressable storage system.

.iframe //www.youtube.com/embed/7QDVRowyUQA 349 560

(See the [presentation slides](https://golang.org/doc/talks/io2011/Real_World_Go.pdf).)

Thanks to everyone who attended our talks and workshops. We look forward to seeing you again soon!
