Continuous integration with Go and GitHub Actions

In this post we're going to walk through how to use GitHub Actions to create a continuous integration (CI) pipeline that automatically tests, vets and lints your Go code. For solo projects I usually create a pre-commit Git hook to carry out these kinds of checks, but for team p...

Shardz

Shard coordination has been one of the bigger challenges to design sharded systems especially for engineers with little experience in the subject. Companies like Facebook have been using general purpose shard coordinators, e.g. Shard Manager, and suggesting that general purpose s...

Changelog grouping with GoReleaser v1.1

In the v1.1 release, GoReleaser introduced a new feature called “changelog groups”. This is a quick post to spread the word. This feature allows you to “organize” your changelog in categories by using regular expressions. Using it with use: github and some...

Auto-generated C4 Architecture Diagrams in Go

Note Hello! Please give Krzysztof a warm welcome in the first guest post on our blog. 🎉 We’ve been working with Krzysztof for the past two years, and we’re excited to share his work here. Miłosz & Robert We all struggle with software architecture diagra...

Quick tip: Change URL query params in Go

In this short post we're going to discuss how to add, modify or delete URL query string parameters in Go. To illustrate, we'll look at how to change this URL: https://example.com?name=alice&age=28&gender=female To this: https://example.com?name=alice&age=29&amp...

Why region based memory allocation help with fragmentation

Go code snippets

AWKGo, an AWK-to-Go compiler

A discussion of AWKGo, a simple compiler that translates a useful subset of the AWK text processing language into Go source code.

Testing Linux packages on GitHub Actions

One issue we had from time to time on GoReleaser was related to its Linux packages. We had a single map from GOARCH to Linux arch, when in fact, each package manager might have their own. That led to less popular packages (e.g. arm) to report the wrong architecture and thus be no...

Why your Go programs can surprisingly be dynamically linked