go-asyncapi: load AsyncAPI 3 specs in Go
go-asyncapi reads AsyncAPI 3 documents in Go and hands you servers, channels, operations and messages as plain structs, with every $ref on the way to them followed across files, every …
Mostly writing code that does stuff…
go-asyncapi reads AsyncAPI 3 documents in Go and hands you servers, channels, operations and messages as plain structs, with every $ref on the way to them followed across files, every …
You shouldn’t be, because the AsyncAPI spec already says exactly what every message looks like and a machine can retype it better than you. I wrote gen-asyncapi so an AsyncAPI …
Here’s the code everybody writes. A request comes in, you generate an id, and something a few calls down needs to log it: func handleOrder(ctx context.Context, requestID string, o Order) …
Go 1.21 shipped log/slog and it’s good. What it doesn’t ship is any way to configure it, so every service starts with a version of this: var level slog.Level switch …
The first version streamed over SSE. Then something needed the same turn over NATS, and I found out I’d built the framing into the wrong layer. event: / data: / …
The moment that decides what kind of library you’re writing is the one where a human has to approve a tool call. Everything is lovely right up until then. The …
Say it out loud: aichteeteapee. Go on. Sound it out. Aitch-tee-tee-pee. Yeah. That’s HTTP. I named my Go HTTP library by spelling “HTTP” phonetically and published it with a straight …
Every service I write needs exactly one piece of information before it does anything else: is this thing running in prod, or is some poor bastard (me, at 2am, half …
When I was building PIrateRF, I had two options. Option one: shell out to a pile of C binaries from rpitx every time I wanted to key up a transmitter, …
Look, I’m gonna be straight with you. Go’s error handling is fucking verbose, and debugging without context is like trying to find your keys in a pitch-black room while drunk. …