C's <code>malloc()</code> and <code>free()</code> APIs are reasonable APIs for C

Parent links in Go ASTs

A common question that comes up when writing AST-based tooling in Go is &quot;how do I find a node's parent?&quot;, or more generally, &quot;what are all the ancestors of a given node?&quot; Go's AST package does not come with parent links out of the box; this is a common choice...

Go 1.19 added an <code>atomic.Pointer</code> type that's a generic type

Gotcha: testable examples in Go need an `output` comment

One thing I really like about building libraries in Go is that you can create testable examples as a first-class citizen of the testing framework. This allows writing example code in the repository in a way that can make sure that expected use cases are always valid and do not br...

Announcing GoReleaser v1.11 — the hundred commits release

This release took a while, for all the good reasons: a ton of new features and bug fixes for your delight! Oh, and, over 100 commits! It might be the biggest GoReleaser release in commits made, although I have no data to back it up — except my memory. GoReleaser s...

Enabling Nightly releases using GoReleaser Pro

GoReleaser Pro v1.11+ added support to keeping a nightly release. That means that, whenever you want, you can run: goreleaser releaser --clean --nightly And it&rsquo;ll delete previous nightly releases and create a new one with the current commit artifacts. To enable it, you&rsqu...

Shipping completions for Go CLIs using GoReleaser and Cobra

Everyone likes command line completions, so much that some even install extra tools just to have them. But you don&rsquo;t need to install anything just for completions: Bash, Fish and ZSH all support it out of the box! In this post I&rsquo;ll show you how to ship completions for...

How I used Go to make my radio auto-switch to AUX-IN when a Raspi plays music

Ok, so your radio lacks AirPlay support but has an auxiliary input and can be remote-controlled via the Frontier Silicon API. Fetch a Raspberry Pi, put Shairport-sync and Raspotify on it, plug it into the AUX port, and glue everything together with some Go code. Et voilà - home...

Introducing the `tidied` tool, to more easily check whether `go mod tidy` has been run

If you're working with Go projects that use Go modules, you may be aware of the format of the go.mod and go.sum, which are used to track dependencies and their checksums respectfully. For instance, if we take the following go.mod, you'll notice there are two sections for dependen...

Some resources for looking at the current development version of Go