#317 — June 19, 2020

Unsubscribe  |  Read on the Web

✍️ 'Generics' has come up as a topic time and time again for years and it came top in last year's Go survey as the most desired missing feature in Go. Well.. it seems things may be looking up for generics fans and this issue focuses on the latest developments.

Golang Weekly

The Next Step for Generics — Last July, there was a post on the official Go blog – Why Generics? – which addressed the popular demand for generics in Go. The Go team has listened, they’ve coded, they’ve tested, and they’re back with an update. Contracts are gone (hurrah!) and a simpler design is being proposed.

Ian Lance Taylor and Robert Griesemer

A Draft Design for Type Parameters — Just because we know many readers don’t click on links within article summaries, we thought we should feature this.. it’s the actual proposal for extending Go with optional type parameters which would help with the implementation of generic types.

Ian Lance Taylor and Robert Griesemer

Find & Fix Code Performance Issues — You can’t improve what you can’t measure. Install in minutes. Profile and understand Go code’s behavior and performance. Browse through appealing graphs. Blackfire.io is now available as Public Beta.

Blackfire.io sponsor

Let's Play with the Generics Draft Design: Building a Hashtable“This blog will describe the lessons I learned porting my toy hashtable to the new generics draft design.” Nothing like a practical demonstration, and this is an extensive one.

Matt Layher

pkg.go.dev is Now Open Source — The source behind the canonical package and module repository is now yours to see, learn from, and contribute to.

The Go Blog

⚡️ Quick bits:

💻 Jobs

Enjoy Building Scalable Infrastructure In Go? Stream Is Hiring — Like coding in Go? We do too. Stream is hiring in Amsterdam, and the US. Apply now.


Sr. Software Engineer at CrowdStrike (Remote) — CrowdStrike is the leader in cloud-delivered endpoint protection, which helps protect our customers from cybersecurity attacks.


Find a Job Through Vettery — Vettery specializes in tech roles and is completely free for job seekers. Create a profile to get started.


📚 Articles & Tutorials

Continuous Fuzzing with Go at Dgraph — Fuzzing is a technique of testing systems by providing lots of varied, mutated, or even just random data and seeing what happens. The query language for Dgraph, a graph database built in Go, is tested in such a fashion and here’s how it works.


A Concise Guide to the Latest Go Generics Draft Design — Not tired of all the generics news this week? Well, we have more goodies for you! :-)

Preslav Mihaylov

An Introduction to Producing and Consuming Kafka Messages in Go — Kafka is a popular distributed streaming platform and this is a short, accessible intro to how you can use it with Go.

Aaron Raff

Builds Run Faster on Buildkite 🏃🏽‍♀️🏃 — Build times <5 mins at any scale. Self-hosted agents work with all languages, source control tools & platforms.

Buildkite sponsor

Containers The Hard Way: Gocker: A Mini Docker Written in Go — This post goes deep on how containers use Linux primitives (namespaces and cgroups) to do what they do with code examples from Gocker.

Shuveb Hussain

Evaluating Go's Package Management and Module Systems — Go doesn’t have a “package manager” in the traditional sense but modules help cover similar ground. This tutorial (on a typically Ruby blog, so it’s aimed at beginners/intermediates) covers the basic ground of using Go modules and managing dependencies.

Ayooluwa Isaiah

How to Handle Errors in Go — 5 simple rules.

Lukas Lukac

Handling Go Modules Replacement Directive Version Lag and Fork Maintenance — So, the title kinda says it all (literally), so if you’re seeing oddities when you replace modules with local versions, read this.

Steve Coffman

🛠 Code & Tools

A Toy Lisp 1.5 Interpreter Implemented in Go — By Rob Pike, no less, as “a pedagogical experiment” to implement a Lisp directly from a specification in an early Lisp programmer’s manual.

Rob Pike

Syncthing: A Go-Powered Continuous File Synchronization Tool — If you want an open-source Dropbox, Syncthing is here for you (and it’s written in Go, of course).


s4: An Interface for The Shamir Secret Sharing AlgorithmShamir’s Secret Sharing (s4) is an algorithm for sharing secrets by splitting them up. The interesting part here is Simon compiled the Go code to WebAssembly and offers this online tool which means secrets never leave the user’s machine.

Simon Frey

Siggo: A Terminal UI for Signal Messenger — A Go-powered interface to the Java-powered signal-cli client.

Derric Williams

CI/CD with Docker and Kubernetes eBook by Semaphore

Semaphore sponsor

awsls: A List Command for AWS Resources — Got an AWS account? Unsure of exactly what’s running or lurking around in it? Enter awsls.

Jan-Christoph Küster

vSSH: Go Library to Execute Commands Over SSH at Scale — Always interesting to see something new out of Yahoo! This library is for handling tens of thousands of SSH connections and executing commands across them.


VictoriaMetrics: A Scalable Time Series Database — Written in Go, VictoriaMetrics is aimed to be used as a long-term store for Prometheus and supports the Prometheus querying API.


jqview: Simplest Possible Native GUI for Inspecting JSON Objects with jq — Just pipe some JSON into it. Uses Qt for the GUI side of things.


🎲 Fun and Side Projects

John Conway, the esteemed mathematician who came up with the eponymous Conway's Game of Life, sadly passed away several weeks ago, but his most famous creation lives on in the shape of numerous implementations.

This week's highlighted side project is Golife, a Go based Game of Life implementation, by Ayooluwa Isaiah.