The C <code>free()</code> API gives libraries and functions useful freedom

Creating a tag and releasing from a GitHub Action, with GoReleaser

Most people run GoReleaser by creating a tag locally, pushing it, and letting their CI takes care of the matter. Another lesser known option is to leverage workflow_dispatch on a GitHub Action to create the tag locally, and then &ldquo;auto-creating&rdquo; the tag once the releas...

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...