Coroutines for Go

Why we need coroutines for Go, and what they might look like.

Govulncheck v1.0.0 is released!

Version v1.0.0 of golang.org/x/vuln has been released, introducing a new API and other improvements.

Storing Data in Control Flow

Write programs, not simulations of programs.

Polymorphism and other important aspects of inheritance

Introducing `dmd-web`, a web frontend for Dependency Management Data (DMD)

Since starting the project in February, I've been having a great time working on dependency-management-data, a project to make it easier to understand how internal and Open Source dependencies are used in your projects. We've been using it a fair bit at Deliveroo and it's helped...

Ungrammar in Go and resilient parsing

It won't be news to the readers of this blog that I have some interest in compiler front-ends. So when I heard about a new(-ish) DSL for concrete syntax trees (CST), I couldn't resist playing with it a bit. Ungrammar is used in rust-analyzer to define and access a …

Finding bugs with fuzzing

In the thrilling conclusion to our fuzz testing series, we’ll use Go’s fuzzer to find a real bug in our code, and also to verify the fix.

Finding bugs with fuzzing

In the thrilling conclusion to our fuzz testing series, we’ll use Go’s fuzzer to find a real bug in our code, and also to verify the fix.

Sharing state between `net/http` method calls in Go

I've recently been writing some HTTP server code with Go, and found it not-super-searchable to find out how to have a struct that shares state between method calls, so I thought it'd be good to blogument it. For a super contrived example, we want to share the state along our serv...

Names should be as short as possible while still being clear

Short, meaningful names that take context into account are better than long, verbose names that don't.