Tim Raymond

Reflections on Gophercon 2018

  • Tim Raymond
  • September 6, 2018
  • Reading time: 7 minutes.
  • conferences go

Gophers from around the world descended upon Denver, Colorado for the fifth annual GopherCon last week. It’s been fascinating to watch GopherCon grow up over these past five years to its largest attendance yet. More people are using Go, in interesting new ways, and while we all wait for the videos to be released, I wanted to share a few highlights. When available, links to the Sourcegraph Live Blog for each talk mentioned have been included.


This GopherCon fell upon the heels of the Go 1.11 release, which introduced experimental Go modules support. In a video address on the first day of the conference, Russ Cox requested that audience members try the new modules support so that adequate feedback could be collected and incorporated into the Go 1.12 release this winter.

The integration of modules into Go 1.11 has also spawned several other projects related to them which were promoted at this GopherCon. The most exciting among them was Microsoft’s Project Athens, introduced by Aaron Schlesinger during a lightning talk on the final day of the conference.

Athens promises to provide a central repository and CDN for Go modules, similar to centralized package management repositories available for other languages. The project is under active development and can be found on Github.

One complaint about modules is that major version upgrades requires rewriting your import paths to include a “vX” part, where X is the new major version. A tool written by Marwan Sulaiman called “mod” (Github) eases some of the pain involved with major version upgrades. In his lightning talk, Marwan also demonstrated that “mod” will also go so far as to help you open pull requests on other projects to help keep their dependencies up to date as well.


Many developers use the Go programming language to work directly with Networking protocols, and many of the talks at this year’s GopherCon focused on this in one way or another.

Filippo Valsorda’s talk on “Asynchronous Networking Patterns” (Sourcegraph Live Blog) was a tour of the “net” package where he built a TCP proxy live with similar performance characteristics to Nginx. He highlighted how structuring your proxy in a certain way would even leverage splice(2) on Linux for zero-copy networking. Filippo also demonstrated a smarter proxy that would parse out some TLS header information from the proxied connection. While Filippo didn’t have time to dive into the parser on stage, he recommended the cryptobyte package for writing network protocol parsers.

Matt Layher’s talk (Sourcegraph Live Blog) complemented Filippo’s as a deep dive into writing protocol parsers. Matt used a parser he wrote for IPv6’s Neighbor Discovery Protocol (NDP) as the subject of discussion and provided practical tips for developers looking to develop their own protocol parsers. Some great suggestions included validating your inputs prior to allocating memory to hold their parsed values (this avoids doing unnecessary work). Another great suggestion was to implement only the most common features of a protocol and leave a “Raw” type for more esoteric usage.

Networking themes continued into the lightning talks as well, with a demonstration of a home router project by Michael Stapelberg called router7 (Github), a Netlink package from Matt Layher, and even a brief appearance of Brad Fitzpatrick’s garage data center.

New Uses for Go

As the Go programming language matures, developers are finding interesting new ways to use it. Several talks at this year’s GopherCon showed how Go can be used in unexpected ways.

Ron Evans’s keynote presentation (Sourcegraph Live Blog) introduced the GoCV package which provides bindings to the widely-used OpenCV computer vision library. Through numerous live demonstrations, Ron showed fascinating applications of Go programs that could perform live video editing and even pilot drones using face detection.

During the lightning talks, another interesting use of Go appeared in the form of a modular synthesizer called Shaden (Github). Brett Buddin, the author of Shaden, treated audience members to a live performance of Shaden’s capabilites and demostrated how it can be configured using a built-in Lisp interpreter.

Also featured was a tutorial session by Hunter Loftis that focused on building a raytracer in Go. This talk occurred during another that I had attended, so I’m sad to have missed it. However, Sourcegraph’s live blog coverage of it was fantastic and is worth a read.

Go Internals

Every time I walk away from a GopherCon, I feel as though I do so with a greater understanding of what happens under the hood of the Go runtime. This year was no exception, leading off with a fantastic performance workshop by Dave Cheney and Francesc Campoy, a keynote presentation by Kavya Joshi on the scheduler, and a tutorial session discussing Go’s memory allocator.

In the performance workshop, I learned what constitutes a good benchmark, and how to use the benchstat tool to detect whether changes I’ve made have improved performance in a statistically significant way. Perhaps my favorite part of the workshop was Francesc’s in-depth tour of the tracing features offered by Go’s performance tools. While the tracer is powerful, having a guide take us through its overwhelming feature set was worth the price of admission alone.

Kavya Joshi’s keynote (Sourcegraph Live Blog) on the scheduler built upon things that I learned in the performance workshop by building up the Go scheduler from a set of requirements and first principles. Her talk collected things that I had heard from various places (for example, the word “work stealing” gets thrown around sometimes) and knitted them into a cohesive narrative that I hope will serve as a reference long into the future.

Looking Forward

Noticeably absent from any talks this year was Go 1.11’s other headlining feature — support for Web Assembly. I expect that as people have the chance to play with Web Assembly over the coming months, we might see it make an appearance in conferences next year.

Some exciting new proposals for Go 2 were also presented by Russ Cox, including a compact error handling mechanism and a proposal for introducing generics to the language. At the time of this writing, these proposals are already being hotly debated, and the proposals remained a topic of discussion throughout the conference.

The conference closed with an ode to the beginners in our community by Natalie Pistunovich (Sourcegraph Live Blog). Her keynote provided much-needed perspective about how we can all become better mentors for the newer Gophers in our community.

It was a poignant end to GopherCon’s fifth and final year in Denver, Colorado. It’s clear that we have much to look forward to in the coming year in the Go community. Next year, we’ll meet once again in San Diego!