#332 — October 2, 2020

Unsubscribe  |  Read on the Web

💬 Very few tutorials out this week, so we've decided to skip that section and instead treat you to an interview with community member Mat Ryer which you can find at the end of this issue :-)

Golang Weekly

Developing Price and Currency Handling for Go — The creator of the Currency library reflects on its creation and the technical aspects of working with prices and monetary values in code.

Bojan Živanović

Ebiten v1.12.0 Released: The 2D Game Library, Now with a Go-Like Shader Language — Ebiten’s API is great for quickly developing 2D games for multiple platforms, all within Go, and this latest version lets you write custom shaders in Kage, a Go-esque shader language.

Hajime Hoshi

Learn How to Move Fast From Code to Kubernetes — Get our free eBook - “CI/CD with Docker and Kubernetes eBook”. Learn how to deliver high-quality cloud apps rapidly and consistently.

Semaphore sponsor

GoLand 2020.3 Early Access Program Starts — It’s a commercial IDE but it polls as popular with Go developers so we thought we’d share the news especially as it’s free to use during EAP. Improved debugging, table test support, and drag and drop splitting are amongst the improvements here.

Ekaterina Zharova (JetBrains)

Faster Literal String Matching in Go — Ben, the creator of go-string, a set of useful string functions either unavailable or slower in the standard Go version, reflects on his approach to faster string matching.

Ben E. C. Boyter

⚡️ Quick bytes:

💻 Jobs

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


Principal Engineer (SF/Remote) — Come be a leader here. Raise the bar. We're changing user behavior in an entire industry and need strong engineers to join up.


Find a Job Through Vettery — Create a profile on Vettery to connect with hiring managers at startups and Fortune 500 companies. It's free for job-seekers.


🛠 Code & Tools

duf: Think htop but for Disk Usage — For Linux, BSD and macOS and written in Go.

Christian Muehlhaeuser

promptui: An Interactive Prompt for Command-Line Apps — Includes some elegant terminal-based controls like password entry, item selection, and a confirmation prompt.


➡️ TimescaleDB for Go Developers Quickstart — Learn how to connect your Go apps to TimescaleDB (relational time-series database), run your first query & more.

Timescale sponsor

GOTK3: Go Bindings for GTK3 — To get the most out of this you will already want to be familiar with developing for GTK3 (the cross platform widget/GUI toolkit).


rqlite 5.5: A Distributed Relational Database Built on SQLite — Think SQLite but turned into a ‘proper’ distributed database (using Raft consensus) and that’s what you get here. v5.5.0 adds support for parameterized SQL statements.


sqlbench: Measures and Compares The Execution Time of SQL Queries — Only for Postgres right now, though pull requests for other databases are welcome. Written in Go.

Felix Geisendörfer

Reach Your Go App Users Anywhere with Video That Streams Beautifully, Everywhere

Mux sponsor

🇯🇵 Kagome v2: A Japanese Morphological Analyzer — I don’t understand this, but if you speak Japanese and you have some Japanese words you need to break apart, maybe you will 😄


ko 0.6: Build and Deploy Go Apps on Kubernetes


Jitterbug: Tickers with Random Jitterjitterbug.Ticker behaves like time.Ticker but.. more nervous 😄

Louis Thibault

🗣 Interview

Mat has written a book (Go Programming Blueprints), co-created Gopherize.me, created Bitbar, and is currently a co-founder at Pace. We’re grateful that he’s taken the time to answer a few questions today.

What first drew you to Go?

Before the Go 1.0 release, I wanted to build something on Google App Engine and there were only three options at the time: Java, Python and Go. I hadn't used any of them before, but Go had a little EXP (experimental) warning on it, which I failed to resist.

I had spent years tying myself in knots with complicated type hierarchies in C#, so it was intriguing to learn that Go didn't even have classes.

I was surprised by how quickly I could pick up and get things working in this new language. Over time I realised that the philosophies that were driving its design (minimalism, simplicity, a focus on readability and code maintenance) really resonated with me.

It isn't an overstatement to say that I kind of fell in love with Go.

You used to work at Machine Box, which creates Facebox, Objectbox, and other ML “boxes”? Do you think Go has a future as a premier ML language?

Go is out-paced by Python in this area because of the pedigree and momentum it has with mathematicians and data scientists, as well as tried and tested libraries for crunching all those numbers.

At Machine Box, we used a fair bit of Python inside the boxes in the early versions. We discussed writing and open-sourcing some Go libraries to replace the Python ones, but the company was sold before we got round to it.

Go 2.0 is on the horizon…what features are you most hoping make the cut?

They can add features to Go 1.x. I think Go 2.0 would be an opportunity to remove or simplify things. For example, I'd drop the new keyword in favour of creating thingsLikeThis{}

The standard library came to be through a process akin to evolution by natural selection. The Go 1.0 promise brings stability and reliability to users (I think it's the unsung hero of Go's success) but it's an albatross around the necks of the contributors. Go 2.0 would let us apply modern thinking to old APIs.

Having said that, Go's standard library is very good. I think we all take it for granted, but it's a real achievement of software engineering.

* I did a talk about Things in Go I Never Use at Gotham Go.

You are currently working on Pace, a “minimalist project management tool”. Is it entirely written in Go?

The backend is entirely written in Go which communicates via a JSON/HTTP RPC API to a JavaScript/TypeScript Svelte app that runs in the browser.

We're trying to share and open-source as much of the useful internals of Pace as we can. And we may even extract some pieces as standalone projects/products. The blog is mostly inspired by real problems we had to solve when building Pace.

We don't obsess too much over the performance of code unless it's proven to be a bottleneck, so it's surprising that Pace turns out to be the most performant project I've ever worked on. A customer even asked us what "tricks" we used to make it "feel" so quick, but I think they were just used to JIRA.

What advice do you have to a budding Gopher?

Get good at writing unit tests for your Go code, it's always the quickest way to iterate. Try test-driven development; you might find it improves your code quality and package design (it did for me).

Build real little things, and share them with others. Solve real not imaginary problems. Talk about your experiences online or at meet-ups. I know you think you don't have anything interesting to say, but that is never true.

Mat works for Pace.dev.