Spilling the Gin • The Applied Go Weekly Newsletter 2025-12-14

Your weekly source of Go news, tips, and projects

Spilling The Gin
Hi ,
Once upon a time, when HTTP routing packages were still rare, there was a new project named Martini. Quickly, it grew popular but also drew some criticism due to using reflection. The creator of Martini, Code Gangsta, a.k.a. Jeremy Saenz, reacted quickly and created Negroni, which did quite the same as Martini but without slow reflection. Thus, a line of Go HTTP frameworks named after alcoholic drinks was established.
Soon, another framework called Gin entered the scene, using a Martini-like API but claiming to be 30-40 times faster. Named "Gin" because (of course) Martini and Negroni.
Fast-forward eleven years. Gin accumulated plenty of features, which means it inevitably also accumulated size, complexity, and a certain tech debt. But is this enough to call Gin a "bad software library," as Efron Licht does in the featured article below? Well, I'm not the one to answer this question. Efron has collected quite some arguments to support his standpoint, and lacking a counter-perspective (I have never used Gin), I leave it up to you to draw a conclusion.
On a personal note, it's the time of the year again when Christianity goes into celebration mode, and so I'll pause the newsletter for three issues to focus on the family. See you again on Jan 11th, 2026!
Happy Holidays!
–Christoph
Featured articles
Gin is a very bad software library
A long rant about Gin.
Practical Patterns for Go Iterators
Have you managed to fully wrap your brains around the (fairly) new Go iterators? I wouldn't say that I have! Blogs like this one are thus a welcome aid (but don't forget to play with the code—"learning by doing"!)
Project Of The Week: meysam81/parse-dmarc
Ok, so you have meandered around the obstacles and footslings of setting up SPDIF and DKIM to secure your mail against spoofing, and you finally have enabled DMARC with reporting on, waiting for DMARC reports to come in. But—what the heck!—these "reports" are incomprehensible XML files! A useful report looks different.
Fret no more: dmarc-parse is a tool that turns DMARC XML blobs into useful reports, and the reports into stats. Set it up to connect to your mail server (preferably with an app password if your mail service supports this) and see the most important data at one glance. All this comes as a single, dependency-free binary.
Podcast corner
Cup o' Go | 🪪 Certificate chains, Dingo, and ML in Go with Riccardo Pinosio and Jan Pfeifer
One day after the previous newsletter issue came out, Cup o' Go went back on air after their short break, featuring Riccardo Pinosio of Knights Analytics (makers of Hugot) and Jan Pfeifer, creator of GoMLX.
Cup o' Go | All software sucks... then you die. But first: GopherCon 2026 dates and location announced!
Erik St. Martin & Johnny Boursiquot are the interview partners in this episode of Cup o' Go. You might know them from Go Time, the podcast that isn't anymore.
No Silver Bullet | DDD: A Toolbox, Not a Religion
Miłosz and Robert of Three Dot Labs are pragmatic engineers par excellence. No wonder they have a clear and pragmatic view on domain-driven design.
Quote of the Week: Why Most Projects Fail
Most projects fail not because of technical challenges, but because they don’t handle the business domain well.
More articles, videos, talks
Go Cheatsheet 2025 - Interactive Golang Reference with Code Examples | GoInterview.dev
Cheatsheets are useful; cheatsheets that actually run the code they present are fabulous.
Dolt is as Fast as MySQL on Sysbench | DoltHub Blog
Dolt, the version-control-enabled SQL database written in Go, seems to fare quite well on performance tests. Catching up with MySQL on performance is a noteworthy achievement, but I wouldn't necessarily see it as a Go-vs-C question.
Just a moment...
This article spawned some debate on /r/golang, where many commenters criticized the doomsaying tone of the article and a lack of research; for example, regarding why memory arenas were exactly dropped (and why this decision shouldn't be considered a "miss"), or regarding the current discussion about memory arenas.
Picking one comment from the discussion: "The author steering that LLM graduated from college in May and seems mostly interested in blockchain-adjacent market arbitrage, so keep in mind that they're sort of young, myopic and prone to hyperbole."
Ebitengine in 2025 - Ebitengine
12 years of Ebitengine—a Retrospective.
Thinking in packages - Go monk
In this concise article, the author demonstrates the usefulness of test-driven development (TDD) and why breaking code into packages and TDD work well together.
Kaiju Engine Introduction | 2D / 3D Game Engine - YouTube
A new competitor to Ebitengine? Kaiju is based on Vulkan, and the author claims it's faster than Unity. Great to see that Go gains popularity as a basis for games.
Jepsen: NATS 2.12.1
Jepsen test distributed systems for safety; here is there report of testing NATS, the distributed event queue. "A new Jepsen report always makes my morning." - /u/zen-xhipe
The GitHub MCP Server adds support for tool-specific configuration, and more - GitHub Changelog
The local and the remote GitHub MCP Server have now been fully migrated to the official MCP Go SDK.
Go proposal: Secret mode
The upcoming runtime/secret package is meant for developers of cryptographic libraries, but it's nevertheless a fascinating concept to read about, even if you'd never write cryptographic code.
Implementing The Tail at Scale in Golang | Jitesh's Blog
High-traffic servers are better off if they optimize end-to-end latency. A surprisingly simple yet effective approach is the Hedged Requests strategy: If a request to a service node doesn't come back in time (I'm oversimplifying here), send a second request to another service node and use whichever result comes back first.
Projects
Libraries
GitHub - aymaneallaoui/zod-go: a Go-based validation library inspired by the popular Zod library in TypeScript
According to the author, Oudwins/zog would be more feature-complete for production uses, but they started the project before zog existed, and if someone only needs validation without the parse-to-structs part, zod-go might be a suitable lightweight alternative to zog.
GitHub - nao1215/fileprep: struct-tag preprocessing and validation for CSV/TSV/LTSV, Parquet, Excel.
Structured file formats are great, but in real life, working with them means dealing with messy files that don't fully adhere to standards or have other issues that break compatibility. fileprep is a preprocessor for strucutured file formats that cleans up the mess so your file parsers won't choke.
GitHub - ppipada/mapstore-go: MapStore: Local, filesystem‑backed map store with pluggable codecs (JSON or custom), optional per‑key encryption via the OS keyring, and optional full‑text search via SQLite FTS5.
A map store? Yes, it's literally meant for storing Go maps on disk, or rather, keeping maps in sync with their twins on disk.
Tools and applications
GitHub - owenHochwald/Volt: High-performance, concurrent, terminal-based HTTP client
If Postman and VIM had a baby...
GitHub - ryanssenn/ryanDB: A fault-tolerant distributed KV store
Mini projects are a great way of learning how bigger projects solve a particular problem; in this case, how to implement a robust distributed storage.
Joint Force on Steam
Another Ebitengine game on Steam! (Source code here.)
GitHub - jdefrancesco/dskDitto: Super fast duplicate file finder written in Golang.
Creating file duplicates is fast and easy (and most of the time, it goes unnoticed). Finding duplicates is horrendibly tedious without the right tool. dskDitto automates the whole process. (Attention: unlike fclones, the default mode is removing duplicates rather than turning them into symlinks.)
GitHub - bascanada/logviewer: Terminal based log viewer with multiple datasource (OpenSearch, Splunk, Docker, K8S, SSH, Local Command)
If you, like the author, are tired switching between multiple UIs to keep track of systems for debugging a specific issue, you could be a legit target audience for bascanada/logviewer.
GitHub - AmoabaKelvin/logdeck: logs viewing and container management shouldn't be that hard. shipping 🚢
A container monitoring and management tool
Completely unrelated to Go
10 Years of Let's Encrypt Certificates - Let's Encrypt
The positive influence of Let's Encrypt on Web security shouldn't be underestimated. Before LE existed, certificates were expensive and cumbersome to get. Now it's effortless. Let's look forward to 10 more years! (At least)
Revisiting "Let's Build a Compiler" - Eli Bendersky's website
How to evaluate a compiler-building tutorial from the previous millenium? By porting the compiler to a language used today, emitting machine code used today.
Optimize for momentum
Do you know this? You pause a project for a few days, and when you pick it up again, it feels that almost everything is wiped from your brain; you have to work hard to get into the flow again. Here are some tips to keep the momentum up. (via)
