Pointing to a fork of a Go module

Update 2023-09-20: If you're writing a module that is consumed through go install, check out this separate post to avoid a gotcha. If you're building on top of an Open Source Go library through Go modules, there may be times that you need to use a forked version of the project, s...

Announcing GoReleaser v1.10 — the summer release

Fun fact: it is actually winter now here in Brazil. Regardless, this release is packed with new features, quality-of-life improvements and bug fixes!

Running Go tests in Parallel

If you're writing software in Go, you're likely to not be hitting any particularly slow tests, as the language and tooling is very efficient. But as written about in Default Your Tests to run in Parallel, I recommend always running in parallel, so you can surface implementation i...

Ignoring slow-running tests in Go

If you're writing software in Go, you're likely to not be hitting any particularly slow tests, as the language and tooling is very efficient. But sometimes there are tests that you don't want to execute when go test is run, for instance if they're full integration/application tes...

Shipping services more quickly with design-first OpenAPI contracts

This article was originally published on the Deliveroo engineering blog. I'm Jamie, and I recently joined the Care Applications team as a Senior Software Engineer. In Care Applications we build and maintain software that connects consumers, riders, restaurants and agents, making...

Automating boilerplate/scaffolding code with custom code generation in Go

The problem Let's say we're building a RESTful API and want to be able to produce several errors of the following consistent format. We want to create a specific type per error, so we can more easily write some code like so: err := NewErrInternal() if e, ok := err.(*ErrInvalidRe...

A limitation on what '<code>go install</code>' can install (as of Go 1.18)

Stubbing out the Go `http.Client` to test an HTTP `HandlerFunc`

If you're writing Go tests that interact with an API, at some point you'll want to fully test your built API, but don't necessarily want to have the server actually running + interacting with real dependencies. For instance, you may be wanting to use a generated OpenAPI client, b...

Automagically determining feeds provided for a given URL on the command-line

I'm a big fan of feed formats like RSS/Atom, Microformats2 and JSON feed, and like to use a feed reader as my primary reading source. One of the great things about things like I mentioned in Make Your RSS Feed Discoverable is that there are built-in ways that you can make them au...

Managing your Go tool versions with `go.mod` and a `tools.go`

Update 2025-01-29: it's worth reading my morer recent post, Go 1.24's go tool is one of the best additions to the ecosystem in years, which goes into the path forwards, from the upcoming Go 1.24 release. When working with Go codebases, it's likely that you'll be delegating some f...