#279 — September 13, 2019

Read on the Web

In case you missed our note last week, we've moved this newsletter to be sent on Fridays, so we're not late.. honest! 😄
— Your editors, Peter Cooper and Glenn Goodrich

Golang Weekly

The Epic Tale of Tracking Down a 'Memory Leak' in a Go Microservice — An interesting step-by-step tale of how Detectify’s backend team tracked down what seemed to be a memory leak.. but it was down to a change in how Go 1.12 works.

Roberto Soares and Christoffer Fjellström

Building a Better Go Linker — Go’s linker combines the outputs of the Go compiler into the eventual executables you run, but its (lack of) efficiency is causing problems as Go develops. Google’s Austin Clements explains the problem and looks at how to build a better linker for Go.

Austin Clements

Do You Need Go or Kubernetes Training? — We offer on-site corporate training for engineers that want to learn Go (Golang) or Kubernetes. Having trained over 4,000 engineers since 2013, we have carefully crafted these classes for students to get as much value as possible.

Ardan Labs sponsor

Programming with errors — Some tips on using Go 1.13’s errors package (formerly xerrors).

Peter Bourgon

Don’t Force Allocations on the Callers of Your API — We all know about the ‘evils’ of premature optimization but when it comes to designing an API that you might not want to change later.. it’s worth thinking about the performance implications of the choices you make.

Dave Cheney

Go is IEEE's 10th Top Programming Language of 2019 — Python, Java, and C sit at the top of the table, but given Go’s relative youthfulness, seeing it at number ten is pretty neat.

IEEE Spectrum: Technology, Engineering, and Science News

▶  Discussing Generics with Ian Lance Taylor — What are generics and why are they useful? Why aren’t interfaces enough? How will the standard library change if generics are added to Go? These questions and more are discussed on the latest Go Time episode. (54 minutes.)

Go Time Podcast podcast

💻 Jobs

Stream Is Hiring a Go Developer in Amsterdam — Like building scalable infrastructure in Go? We do too. Stream is hiring. Apply now.


Sourcegraph Is Growing. Apply Now to Grow with Us — Build the best large scale developer tools. Product-market fit, clear goals, talented team, autonomy, open source, remote first.


Find a Go job through Vettery — Make a free profile, name your salary, and connect with hiring managers from top employers.


📘 Articles & Tutorials

How Mailgun Built a Lucene-Inspired Parser in Go — A team at Mailgun created a system to let other employees write custom queries that could match against real time events taking place within Mailgun’s systems.

Matt Dietz

Go Modules and The Problem of Noticing Updates to Dependencies — Questions from a cautiously optimistic sysadmin about how Go modules will report changes (if at all) and what it does when a dependency disappears?

Chris Siebenmann

Creating Custom Errors in Go — Sometimes errors.New and fmt.Errorf aren’t quite enough for communicating complicated error information to your users (or to your future self!) Here’s a look at what more you can do.


Using SO_PEERCRED in Go — A practical look at a slightly obscure Unix domain socket option that, intriguingly, provides the server process with user, group, and process IDs of any connected client.

James Bowen

Making Your Own Changes to Things That Use Go Modules — If you’re fiddling around with the dependencies of a program that uses Go modules, there’s some extra work to do to keep things working.

Chris Siebenmann

📕 20 Patterns to Watch for in Engineering Teams

GitPrime sponsor

The Basics of Implementing a Linked List in Go

Daniel Kvist

Using Go 1.13’s New ReportMetric API to Benchmark t-digest Implementations

Jack Lindamood

Bad Go: Not Sizing Slices — If you know how big a slice needs to be, set the size and enjoy a performance boost.

Phil Pearl

▶  if err != nil: Let's Talk About Errors in Go — A podcast from earlier this year including folks like Dave Cheney and Peter Bourgon discussing error handling in Go and the now aborted try proposal.

Go Time podcast

🛠 Code & Tools

Joe Bot: A General Purpose Chat Bot Library — Inspired by GitHub’s Hubot, but written in Go, Joe Bot provides a framework and abstractions for building chat bots.

Joe Bot

GoVector: Vector Clock Logging Library — A vector clock algorithm is used to order events in a distributed system in lieu of a centralized clock. GoVector started as a teaching tool.

Distributed Clocks

Monitoring and Distributed Tracing for Go Apps. Try Datadog Free — Measure the health and performance of your Go applications with Datadog APM. Try it today.

Datadog APM sponsor

Cadence: A Distributed Orchestration Engine Built in Go — This system, built by Uber, simplifies the development of complex stateful distributed applications. This is the server but there are also Java and Go client libraries.

Uber Open Source

quic-go: A QUIC Implementation in Pure Go — QUIC is a transport layer network protocol originally developed at Google that’s forming the basis for HTTP/3. This library may not be of direct interest to many but it can form the basis of HTTP/3 implementations in other projects, such as in Caddy.

Lucas Clemente

GoLand 2019.3 Opens Its Early Access Program — GoLand is a (commercial) IDE for Go developers from JetBrains but you can use/trial these ‘early access’ versions for 30 days.

GoLand Blog

Using GitHub Actions as CI Effectively for Go — Docs and examples on how to do it.

Daniel Martí