An interesting mistake I made with a (Go) SSH client API

The Tao of Go

What is the Tao of Go, and how can we work with it, like a surfer going with the waves instead of struggling against them? By being kind, simple, humble, and not striving; here’s how.

Random testing in Go

Choosing good test cases for our Go programs can be a bit hit-and-miss. What if we could automate that process? Let’s talk about randomisation, property-based testing, and Go’s built-in fuzz testing feature.

Failing to build a useful pre Go 1.21 static Go toolchain on Linux

Announcing GoReleaser v1.17 — the late Easter release

The Easter release is here!

Go 1.21 will (likely) have a static toolchain on Linux

Interfaces 101 : Extensible API Handlers Ep. 10

Introduction In episode 9, Miki discussed how a command flag can be decoded into a user defined type with the Value interface. As a recap, the Value interface consists of two methods: one for serializing the underlying concrete type and one for deserializing a string into an obje...

The adapter pattern in Go

How do you test a database without a database? Don't worry, this isn't one of those Zen puzzles. I have something more practical, but equally enlightening, in mind. Let’s use the adapter pattern to solve the riddle.

Moving from 'master' to 'main' in Git with local changes

Generating `Equal` methods for Go structs with `goderive`

Sometimes you need to check the equality of two structs in Go, and depending on how complicated they are, you probably want to avoid hand-writing the Equal method if possible, and you want to avoid reflect.DeepEqual for performance reasons, at least in your production code. If I...