# GothamGo: gophers in the big apple
9 Jan 2015
Summary: Reporting from GothamGo 2015, 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).
