The Applied Go Weekly Newsletter logo

The Applied Go Weekly Newsletter

Archives
Subscribe
December 14, 2025

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

AppliedGoNewsletterHeader640.png

Your weekly source of Go news, tips, and projects

2025-12-14-spilling-the-gin.png

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.

– Three Dot Labs

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)

Happy coding! ʕ◔ϖ◔ʔ

Questions or feedback? Drop me a line. I'd love to hear from you.

Best from Munich, Christoph

Not a subscriber yet?

If you read this newsletter issue online, or if someone forwarded the newsletter to you, subscribe for regular updates to get every new issue earlier than the online version, and more reliable than an occasional forwarding. 

Find the subscription form at the end of this page.

How I can help

If you're looking for more useful content around Go, here are some ways I can help you become a better Gopher (or a Gopher at all):

On AppliedGo.net, I blog about Go projects, algorithms and data structures in Go, and other fun stuff.

Or visit the AppliedGo.com blog and learn about language specifics, Go updates, and programming-related stuff. 

My AppliedGo YouTube channel hosts quick tip and crash course videos that help you get more productive and creative with Go.

Enroll in my Go course for developers that stands out for its intense use of animated graphics for explaining abstract concepts in an intuitive way. Numerous short and concise lectures allow you to schedule your learning flow as you like.

Check it out.


Christoph Berger IT Products and Services
Dachauer Straße 29
Bergkirchen
Germany

Don't miss what's next. Subscribe to The Applied Go Weekly Newsletter:
Share this email:
Share on Twitter Share on LinkedIn Share on Hacker News Share on Reddit Share via email Share on Mastodon Share on Bluesky
Website favicon
LinkedIn
Powered by Buttondown, the easiest way to start and grow your newsletter.