# GothamGo: gophers in the big apple
9 Jan 2015
Summary: Last November more than two hundred gophers from all across the United States got together for the first full-day Go conference in New York City.

Francesc Campoy
campoy@golang.org

##

Last November more than two hundred gophers from all across the United States
got together for the first full-day Go conference in New York City.

The diverse speaker lineup included university students, industry experts, and Go team members.

And good news, everybody! All the talks were recorded and are available:

.image gothamgo/gothamgo.jpg _ 600

  - [Launching into Go](http://vimeo.com/115728346) _by Kathy Spardlin_ -
    a CockroachDB contributor provides pointers for people getting started with Go.
  - [Error Handling](http://vimeo.com/115782573) _by_ [_Bill Kennedy_](https://twitter.com/goinggodotnet) -
    ideas on how to use the Go error interface.
  - [7 common mistakes in Go and how to avoid them](http://vimeo.com/115776445) _by_
    [_Steve Francia_](https://twitter.com/spf13) - the author of some popular
    Go libraries shares his experience.
  - [Cancellation, Context, and Plumbing](http://vimeo.com/115309491) _by_
    [_Sameer Ajmani_](https://twitter.com/sajma) - the Google NYC Go team
    lead explains how cancellation works in Go,
    and how we're retrofitting the Google code base to use it.
  - [Dethorning Package Management](http://vimeo.com/115940605) _by_ [_Keith Rarick_](https://twitter.com/krarick) -
    the creator of godep talks about how to manage your dependencies well.
  - [Everything You've Always Wanted to Know About Go Web Apps (But were afraid to ask)](http://vimeo.com/115940590)
    _by_ [_Mark Bates_](https://twitter.com/markbates) - a survey of Go packages
    for building web apps,
    and insights into why there are so few Go "frameworks".
  - [Building high-performance database applications using Aerospike](http://vimeo.com/116215450)
    _by Chris Stivers_ - a principal engineer at Aerospike shares his experiences
    building scalable applications.
  - [The state of Go on the Android platform](http://vimeo.com/115307069)
    _by_ [_David Crawshaw_](https://twitter.com/davidcrawshaw) - the leader
    of the Go on mobile platforms project tells us what’s coming up and shows a working demo.
  - [Mutexes and Locks](http://vimeo.com/116108566) _by_ [_Jessie Frazelle_](https://twitter.com/frazelledazzell) -
    a member of the Docker core team tells us about concurrency and what to
    do when things go wrong.
  - [Gobot.io](http://vimeo.com/115618722) _by_ [_Ron Evans_](https://twitter.com/deadprogram) -
    awesome robots controlled by Go, with demos!
  - [Doing Go](http://vimeo.com/114941260) _by_ [_Bryan Liles_](https://twitter.com/bryanl) -
    a DigitalOcean engineer delivers a hilarious comedy routine that happens to be about Go.
  - [Things I learned teaching Go](http://vimeo.com/115308225) _by_ [_Francesc Campoy_](https://twitter.com/francesc) -
    the Developer Advocate for the Go team shares his experience teaching Go
    and some advice on how to become a better gopher.

Two more talks come from the Go meetup in New York City, which met the day before GothamGo:

  - [Benchmarking Go](http://vimeo.com/114975899) _by_ [_Brian Bulkowski_](https://twitter.com/bbulkow) -
    the founder of Aerospike talks about profiling tools for Go and Linux,
    and micro benchmarks for goroutines, channels,
    buffers, and and other Go features.
  - [Go Static Analysis Tools](http://vimeo.com/114736889) _by Alan Donovan_ -
    a member of the Go team at Google NY gives a guided tour of several static
    analysis tools designed to help Go programmers understand,
    navigate , and refactor their code.

Make sure to have a look at all of those in preparation for the [FOSDEM](https://fosdem.org/) Go
devroom FOSDEM in Brussels (Belgium) and [gophercon.in](http://www.gophercon.in/) in Bengaluru (India).
