This post is mainly about instrumenting tracing in distributed systems with {OpenTelemetry](https://opentelemetry.io/). Before we get to that we need to understand what constitutes an observable system. Observable systems have three ‘pillars’ of observability: Logs Traces… 

Closures in Go are a very simple device, they happen when a function exists within another function, and that inner function has access to a variable declared in the outer function (the inner function is… 

I spent my Christmas break starting work on a tool that I want to use at work. The tool is a docker-compose like application, but intended to pass information to Podman. docker-compose (or as it’s… 

I’ve been relatively conservative when it comes to Go modules, as they came on to the scene there was the normal process where the change wasn’t 100% meeting expectations. One of those changes was being… 

When developing software natural, the concept of boundaries arises. A package, library, service, or system needs to communicate information to other packages, libraries, services, systems, and users. The boundary lies between those two entities. The… 

Go provides channels as a way to communicate between two goroutines. In essence a channel is a synchronised queue, where a producer writes to the channel, implicitly using the mutex that is hidden inside it… 

For Go development there are a plethora of editors available that someone can use for their daily editor, Go has a wiki page that lists editors and plugins that support Go development. It wasn’t too… 

Unit testing code is validity testing. The developer is ensuring that the function being tested deals with the supplied input in an expected way, either producing output, or returning error information, that is considered appropriate.… 

Recently I wrote a post on using defers, this is a deeper dive into the defer mechanism. As previously explained the idea of defer is to give developers a way to ensure that code is… 

I’ve been keeping a secret, that secret is I absolutely love Go. Ok, it’s not much of a secret, and it’s not that much of an admission. But there’s something that has been really getting… 

According to the Wikipedia article on Fuzzing Fuzz testing “is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program.” This is a very helpful technique… 

Go has a (sometimes) handy feature called defer. A list of commands is executed when a function exits, the defer list. This makes it simpler for a developer to place near relevant code some other… 

Go has anonymous functions, hardly “News at 11” but developers should know how these functions are defined and used. Anonymous functions are functions that are defined with no name, and that is almost all that… 

Recently a YouTube video “So you think you know Go” was doing the rounds with some Go gotchas. It’s an excellent little trip into some of the traps that Go developers may or may not… 

For people beginning with some programming languages, like Go, C, or C++, pointers can be a little confusing. It doesn’t help that the syntax used depends on context in order to understand what’s happening in…