13h ago · 9 min read · gRPC interceptors are the middleware pattern, specialized for gRPC. If you've written HTTP middleware before, the shape is familiar — a function that wraps a call, can observe or modify the request, pass to the next handler, then observe or modify th...
Join discussion13h ago · 8 min read · Go 1.18 shipped generics in March 2022. The two years before that were dominated by hopeful blog posts ("finally, a real type system!") and the two years after by the predictable backlash ("why did we even bother, Go was simpler"). I've written produ...
Join discussion13h ago · 7 min read · Go's performance culture has a ritual quality. "Use sync.Pool." "Avoid interface boxing." "Preallocate slices." Copy-pasted from blog posts and applied without measurement. Sometimes helpful. Often hollow. The honest answer is that Go performance wor...
Join discussion13h ago · 7 min read · sync.Pool is one of those Go features that shows up prominently in "how to write fast Go" blog posts and then gets applied to everything. The result is a codebase sprinkled with pools that don't help and sometimes hurt. Most Go code I review does not...
Join discussion19h ago · 5 min read · In Part 3, I built authentication — JWT tokens, bcrypt hashing, middleware that wraps handlers like Russian dolls. The API had four endpoints and was fully protected. But it could only create and read entries. No updating. No deleting. And zero tests...
Join discussion19h ago · 19 min read · The failure scenario At 09:14:33, a customer places a £29.99 order on your platform. The order is saved to the database. The process crashes before publishing order.created to RabbitMQ. The fulfilment
Join discussion
22h ago · 9 min read · Rate limiting is a problem every HTTP service eventually faces. In this post I will walk through building an in-memory token bucket rate limiter in Go, using chi for routing and nothing but the standa
Join discussion
22h ago · 9 min read · When we set out to build CreateOS, the marketplace was going to be a web page. You'd go to a URL, browse Skills in a grid, click to purchase, and get a dashboard row. Standard stuff. Then we actually used it. Every time we wanted to find a Skill whil...
Join discussion