#317 — June 19, 2020
✍️ '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:
- Esteemed gopher and Googler Jaana Dogan has some notes on the generics proposal too.
- GORM is a popular Go ORM library and v2.0 is just around the corner — here are the draft release notes.
💻 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.
Stream
Sr. Software Engineer at CrowdStrike (Remote) — CrowdStrike is the leader in cloud-delivered endpoint protection, which helps protect our customers from cybersecurity attacks.
CrowdStrike
Find a Job Through Vettery — Vettery specializes in tech roles and is completely free for job seekers. Create a profile to get started.
Vettery
📚 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.
Dgraph
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).
Syncthing
s4: An Interface for The Shamir Secret Sharing Algorithm — Shamir’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.
Yahoo
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.
VictoriaMetrics
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.
fiatjaf
🎲 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.