# Go and the Google Cloud Platform
12 Jun 2013
Summary: Two talks about using Go with the Google Cloud Platform, from Google I/O 2013.

Andrew Gerrand

## Introduction

In 2011 we announced the [Go runtime for App Engine](https://developers.google.com/appengine/docs/go/overview).
Since then, we have continued to improve the Go App Engine experience,
and generally improved Go support for the Google Cloud Platform.
For instance, the [google-api-go-client](http://code.google.com/p/google-api-go-client) provides
a Go interface to a range of Google's public APis,
including Compute Engine, Cloud Storage, BigQuery,
Drive, and many more.

Learn more by watching these talks from Google I/O this year:

## High Performance Apps with Go on App Engine

_The Go runtime for App Engine is a high performance engine for_
_running web applications. It produces fast responses,_
_starts instances in a fraction of a second, makes the most use_
_of instance hours, and allows your app to do serious processing_
_at full machine speed._
_Come along to hear how to fully exploit the power of Go on App_
_Engine and make your web applications the best they can be._

.iframe //www.youtube.com/embed/fc25ihfXhbg 309 549

## All the Ships in the World

Visualizing Data with Google Cloud and Maps

_Tens of thousands of ships report their position at least once_
_every 5 minutes, 24 hours a day._
_Visualizing that quantity of data and serving it out to large_
_numbers of people takes lots of power both in the browser and on the server._
_This session will explore the use of Maps,_
_App Engine, Go, Compute Engine, BigQuery, Cloud Storage,_
_and WebGL to do massive data visualization._

.iframe //www.youtube.com/embed/MT7cd4M9vzs 309 549
