Have Another Cup Of Tea • The Applied Go Weekly Newsletter 2025-05-04
Your weekly source of Go news, tips, and projects
Have another cup of tea
Hi ,
Go isn't quite dead yet. In fact, it's quite to the contrary, as a JetBrains report and a statistic evaluation by isthistechdead.com
confirm. (See the "More Articels" section.) But you knew that already, didn't you? We Gophers just need to look around to see how the Go ecosystem is striving. Developers come up with insightful articles, from a minimalist load balancer to minimizing dependencies and dissecting Bloom filters.
The Go team also wasn't idle and built a prototype of a new garbage collection algorithm called Green Tea that is aware of modern memory architectures. More in the Spotlight section!
May the 4th be with you!
– Christoph
Featured articles
This 150-Line Go Script Is Actually a Full-On Load Balancer | HackerNoon
Load balancers are a dime a dozen, and you wouldn't even need one written in Go to serve as an LB for your Go backends. This article doesn't want to sell you another LB for your infrastructure but rather provide a super simple LB implementation to grasps the concepts and mechanisms of an LB.
Organize your Go middleware without dependencies
Since Go v1.22, net/http
can mimic the behavior of external routing packages, as Alex Edwards demonstrates with alice
and chi
. The point: reduce dependencies while keeping the familiar look-and-feel of your middleware-chaining code.
Bloom filters
Bloom filters are fascinating beasts: They are used for testing the existence of an item in a set. If the filter says that the item isn't in the set, the answer can be 100% trusted. If it says the item exists in the set, there is a small chance that it doesn't. Eli Bendersky explains how Bloom filters work, with a sample implementation in Go.
Project of the week: GitHub - zakirullin/gpt-go: Tiny GPT implemented from scratch in pure Go. Trained on Jules Verne books. Explained.
A GPT implementation that you not only can use to learn from the code but also as companion code to Andrey Karpathy's video course "Neural Networks: Zero to Hero" (link in the README).
Podcast corner
Fallthrough: Maintainers, Monetization, and Making The Time
If you are a user of goreleaser
(or plan to use it, or are just curious), then you'll want to listen to this episode of Fallthrough featuring Carlos Becker.
No Silver Bullet: Unpopular opinions about Go
This episode of the Three Dots Labs' podcast No Silver Bullet is about Go. Miłosz and Robert talk about learnings and best practices that not everyone would agree with.
Cup o' Go: 🎉 Surprise! 😯 A new security release is coming!
This new Cup o' Go episode, on the other hand, shouldn't come as a surprise to anyone.
Spotlight: Green tea makes your life easier (if you're a garbage collector)
Steaming hot news: A new garbage collector design for Go is under development, and you can try it out now using gotip
.
What's the problem?
Go's garbage collector is perhaps one of the finest GCs around. Years of ongoing improvement have minimized stop-the-world phases to a minimum and into the sub-millisecond range. Why did the Go team set out to redesign this tested-and-proven piece of technology?
Modern CPU cores achieve high speeds that memory cannot keep up with. Multi-core systems compensate for the speed gap through a hierarchy of fast, core-local memory caches. As a result, the location of a data entity in memory matters quite much for efficiency. Imagine a slice that's loaded into the L1 cache of CPU core 0 and some code executing on core 7 wants to access this slice. The result is a cache invalidation and a relocation of the current state of the slice to core 7's L1 cache.
Traditional garbage collection algorithms, like the tricolor-marking algorithm that Go uses, are unaware of such memory details; they consider memory as an abstract, flat address space that they can freely read from and write to, causing cache misses. Moreover, the larger the number of cores is, the more system threads fight for limited memory bandwidth.
In short, traditional GC algorithms waste time waiting for memory because they don't optimize for non-uniform memory topologies.
Desperately needed: a topology-aware GC algorithm
A garbage collector that meets the requirements of modern multicore architectures with their cache hierarchies and memory bandwidth challenges must have an idea about the architecture it operates on.
The Green Tea algorithm that the Go team has now made public in gotip
takes a new approach. Instead of scanning objects randomly, it groups them into memory blocks ("spans") for processing.
This approach reduces three performance-hampering factors at once:
- Cache misses by processing "nearby" data together
- Contention by having cores work on separate blocks
- Memory stalls by keeping activity inside the core-local caches, reducing access to main memory
In selected GC-heavy benchmarks, the Go team observes a 10–50% reduction in CPU cost for garbage collection compared to the existing GC. Other benchmarks, however, either showed no effect or even regressed. Microbenchmarks are always tricky and have to be interpreted with a good dose of skepticism.
With the release of the prototype as a GOEXPERIMENT in gotip
, the Go team seeks feedback from real-world benchmarks that target complete programs. So if you know of a GC-heavy program or a program that is sensitive to GC overhead, consider testing the new Green Tea algorithm on it and sharing your insights with the Go team. ❤️
Quote of the week: Within a month
At the time, no single team member knew Go, but within a month, everyone was writing in Go.
More articles, videos, talks
Is Golang Still Growing? Go Language Popularity Trends in 2024 | The Research Blog
JetBrains collected survey results and statistics about Go from various sources into one cohesive report. TL;DR: The future of Go is bright! (But you might have known this already deep inside. A language that great doesn't go away that easy.)
Is Go Dead? - Deaditude Score: 15.9
If the JetBrain report isn't enough, here are more stats to prove that Go is on the right track.
Author: "I analysed 50-plus tech stacks and Go is healthiest by far."
Comparing error handling in Zig and Go - YouTube
If you prefer reading, Alex also wrote an article
SIGHUP Signal for Configuration Reloads - by Phuong Le
"You hang up first!"—"No, you hang up!"—"No, you first!"—"You first!"
Challenge: make this Go function inlinable and free of bounds checks :: jub0bs.com
Go does its best to inline functions and remove bounds checks if its safe to do so, but you can help the compiler. This hands-on article shows how.
Announcing Logchef
Logchef is a logfile exploration tool built with Go, SQLite, Vue,js, shadcn/ui, and TailwindCSS.
New research exposes malicious Go modules that totally wipe out your disk
The title is overly dramatic. (The term "clickbait" comes to mind.) We had reports of these "typosquatting" (well, not really) attacks earlier. This article examines the obfuscation technique used to hide malicious code in plain sight.
CNCF and Synadia Align on Securing the Future of the NATS.io Project
NATS, the "central nervous system for building distributed apps" written in Go, was on the verge of becoming a shared-source project. Synadia, the company behind NATS, and the CNCF have now agreed to keep NATS open source.
(On a related note, since May 1st, Redis is available under an open source license again.)
DSA - Data Structures and Algorithms | norbix.dev
The gist of data structures and algorithms in Go, condensed to the bare minimum.
Projects
Libraries
GitHub - amterp/stid: Go library for generating short, unique, time-based string IDs.
This library generates short, unique IDs—and the more time can elapse between two consecutive ID requests, the shorter the ID can be. Good for use cases where you know you would probably need a new ID every 100ms or every second.
GitHub - soypat/glay: Clay UI rewrite in Go for science.
A rewrite of Clay, a high performance 2D UI layout library. WIP.
GitHub - HugoSmits86/nativewebp: Native webp encoder for Go
Now supports WebP animations in Go, with multiple frames, custom durations, disposal methods, looping, and background colors. No C dependencies.
Tools and applications
GitHub - mickamy/goimportmaps: Visualize and validate package dependencies in your Go project
Turn package dependencies into Mermaid, Graphviz, or HTML diagrams.
GitHub - SubstantialCattle5/Sietch: Decentralized, resilient storage for digital nomads.
A peer-to-peer-synchronized, local-first, encrypted storage. Right now, it seems that file access is through the CLI only, but WebDAV and SFTP mounts are on the roadmap.
GitHub - kreulenk/ez-monitor: A tool to easily monitor your infrastructure via SSH
Monitor Linux servers via SSH.
GitHub - redpanda-data/protoc-gen-go-mcp: Go protobuf compiler extension to turn any gRPC service into an MCP server
Give LLMs access to your gRPC-based services.
SAEKO: Giantess Dating Sim on Steam
Another game built with Ebitengine (proof; unfortunately, no source code available)
Completely unrelated to Go
Being reminded that Git commits are separate from Git trees
On Git's advantage of being a content-addressable storage.
Why you should avoid Scrum, and what to do instead
Is Scrum a good development framework? Hasen Judi says no.

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.
Christoph Berger IT Products and Services
Dachauer Straße 29
Bergkirchen
Germany