GopherCon 2015 Recap

With todays release of the videos from GopherCon 2015 I thought I would write up my 5 minutes recap of the conference, in case it helps someone pick the videos that might interest them.

Go Kit: A Standard Library ...

Peter Bourgon

Codifying what it means to write a microservice at a “modern enterprise”. Providing a standard set of APIs for services that wrap common libraries.

  • Transports
  • Logging
  • Instrumentation

Delve Into Go

Derek Parker Engineer at Hashrocket

Delve is a Go debugger, that works directly on the binary. Looks like some special build steps are involved to keep symbols but not a code injection solution. Go-aware so that goroutines are available and understood, unlike in gdb. Very early release.

How a complete beginner learned Go ...

Audrey Lim Developer Evangelist at Nitrous.IO

Amazing talk by a lawyer turned developer. Learned HTTP/CSS/JS then wanted to learn about the “backend”. Lots of issues with trying to learn python or ruby because of frameworks. Enjoyed go’s simplicity because it allowed her to focus on the problems she wanted to solve.

A Practical Guide to Preventing Deadlocks ...

Richard Fliam Software Engineer Lead on Comcast VIPER’s Pillar linear packager

Advice …

  • Focus on DataFlow
  • Draw flow
  • Pipelines
  • Exit Strategies

One of the big lessons from this talk that hit home for me was that CSP != OOP. This really changed the way I am thinking about Go.

Go GC: Solving the Latency Problem

Rick Hudson Engineer at Google

Go 1.5 has a new Garbage collector

  • Mark and sweep
  • Uses app “help” to identify changes during the mark phase
  • Trades throughput for latency

More improvements coming in 1.6

Simplicity and Go

Katherine Cox-Buday Software Engineer at Canonical

Go’s quest for simplicity is clouded by - pop culture, a desire for ease, appeals to authority, small projects/std lib as examples. Easy and Simple aren’t the same thing. What’s really driving simplicity - simple language, composability, concurrency, code that scales, duck typing. Don’t Simplify by Coincidence.

Rebuilding in Go - an opinionated rewrite

Abhishek Kona Engineer at

Parse was a Ruby on Rails shop - moved to Go one process at a time.

  • No downtime
  • Backward compatibility

At least one service supports 6x the concurrent connections after rewrite. Tests run in ⅛ of the time, and apps start an order of magnitude faster. Created lots of libraries - dep injection, graceful restarts, error reporting, “generics”.

Prometheus: Designing and Implementing ...

Björn Rabenstein Production Engineer at SoundCloud

Focused on a couple problems in the prometheus code base. Atomic are faster than channels and locks. Doubles can be wrapped into 64 bits for atomic ops. Running benchmarks in go now allows for multiple CPU settings so that you can compare across different resources.

What Could Go Wrong?

Kevin Cantwell Lead Architect at Timehop

Lots of lessons from programming in Go

  • Don’t modify maps while ranging over them
  • Closures hold pointers to values - so very dangerous in loops
  • Arrays are pass by value <- very very confusing
  • Typed values returned as an interface aren’t nil
  • You can override pre-declared values in your package - and that is really scary

Static Code Analysis Using SSA

Ben Johnson Open source Go developer in databases & distributed systems

There is an experimental package called SSA

  • Provides an internal representation, like assembly, of the code
  • Can be used to track data flow

Several really cool tools are built on top of this

  • safesql looks for sql injection
  • gorename does safe renaming

Go for Mobile Devices

Hana Kim Engineer at Google

Ongoing project to build mobile apps in Go. You can now compile static and dynamic libraries with go - which you can link in manually (think JNI). Building tools for better language bindings. Released an ios and android app called “ivy” written by Rob Pike in Go.

Go Dynamic Tools

Dmitry Vyukov Bug slaughterer at Google

Built a race detector, fuzzer and execution tracer. Talked a lot about fuzz tests, which have found a number of issues in the stdlib and in other places.

  • Randomized input into tests based on initial set of inputs
  • Smart mutations

Embrace the Interface

Tomás Senart Software Engineer and Author of Vegeta

Minimize interface methods so they don’t leak functionality. Use the decorator pattern to wrap interfaces implementations with other implementations - nice example in the talk for HTTP client. Go is about composition.

Uptime: Building Resilient Services with Go

Blake Caldwell Developer, Kentik

Case study of an SSH Proxy at Fog Creek for Kiln. Lots of real world advice. Example of setting a version variable value at compile/build time. Discussion of pprof and Fog Creek open source profiling library.

I worked with Blake on this project. His talk is really interesting and the library he built for runtime profilling is really useful.

The Many Faces of Struct Tags

Sam Helman Software Engineer at Flatiron Health

Kyle Erf Kernel Tools Engineer at MongoDB

Struct Tags are comments inside a struct definition. Encoding libraries use them to set names and flags. Rely on convention, but go vet knows the convention as does reflection. There are some interesting libraries that use these for validation and mapping.

Betting the Company on Go and Winning

Kelsey Hightower Product Manager, Developer and Chief Advocate at CoreOS

Using Go for many tools: etcd, rkt, flannel. Discussed some of the issues with vendoring, but 1.5 is working toward solutions.

Go History

There were 3 talks focused on Go's history and some of its future.

The Roots of Go

Baishampayan Ghose Co-founder at Helpshift

The Evolution of Go

Robert Griesemer Engineer at Google

Closing Keynote

Andrew Gerrand Engineer at Google

and More ...

Cayley: Building a Graph Database

Barak Michener Backend Developer at CoreOS and lead maintainer of Cayley

Cayley is a graph database built on other datastores. Discussion of how to optimize this process.

Code Generation For The Sake Of Consistency

Sarah Adams Software Engineer at Restless Bandit

Discussion on using code generation to build docs from tests and vice-versa. I think Sarah needed some guidence on this talk and unfortunately I can't recommend it.

and More ...

Pre-Talk on Sets in Go - github/xtgo/set

// Inter performs an in-place intersection on the two sets [0:pivot] and
// [pivot:Len]; the resulting set will occupy [0:size]. Inter is both
// associative and commutative.
func Inter(data sort.Interface, pivot int) (size int) {

Interesting shift from defining a data structure to defining operations