Opting In to Transparent Telemetry

Updating the transparent telemetry design to be opt-in. (Transparent Telemetry, Part 4)

From packages to commands

In Part 2 of a series about writing packages, not programs, we see how to test a package that prints to the terminal, and use the result to build our “hello, world” CLI tool.

Interfaces 101 : Go's Logging Interface Ep. 4

Introduction In episode 3, Miki implemented a type that satisfied Go’s error interface. The odd thing about his type was it would be considered not-nil although no value was set for it. To get a better understanding of the situation, Miki gives a brief explanation of how Go det...

Introducing `dmd`, a command-line tool for Dependency Management Data (DMD)

I've been doing a lot of work recently around the dependency data of various projects, which stems from a post and idea of mine from a while ago about monetising the supply chain. Separate to that lofty goal - especially as there are some tools like socket.dev and StackAid workin...

What’s new in Go 1.20? Podcast

I was on episode 267 of the Go Time podcast, talking about What’s New in Go 1.20. Check it out!

Watermill v1.2 released

After almost three years since the last stable release, Watermill v1.2 is finally out! If you’re new here, Watermill is our open-source library for building event-driven applications in Go, the easy way. A lot has happened since v1.1. We’ve been running Watermill on p...

The case for atomic types in programming languages

Interfaces 101 : Error Handling With Go Ep. 3

Introduction In episode 2, Miki examined the impact interfaces have on the performance of a Go program. To perform this experiment, Miki invoked a type’s method in two ways: with the concrete type and as an interface function to measure the difference in execution time. The con...

Interfaces 101 : Heap Escape Ep. 2

Introduction In episode 1, Miki had two functions that performed the similar operation, but returned different types. To refactor this, Miki rewrote both functions as a generic function that allowed him to specify the type to be returned during invocation. In some cases, the comp...

Write packages, not programs

Go has a great standard library. What if we think about our work not merely as building one-off programs, but instead contributing packages to the universal Go library?