So you don't like Go? • The Applied Go Weekly Newsletter 2025-08-31
Your weekly source of Go news, tips, and projects
So You Don't Like Go?
Hi ,
Awww, the 2nd issue after the summer break! I wanted to use the break for streamlining and automating my newsletter editing workflow, but things didn't work out as I wanted, and so I'm doing it now. The reason for wanting more automation is that (a) tedious manual steps are always worth automating, and (b) I'm moving from freelancing (which never filled my week completely, nor my bank account, haha) back to full-time employment. I don't want the newsletter be impacted by this, and my automation attempts shall buy me precious time that I can better devote to writing spotlights and comments on articles or projects I share here. My bigger plans are to build a \"vacation mode\" where the workflow still collects articles and projects, albeit without comments, to minimize the disruption during recreation. THIS should be something you'll notice—hopefully in a positive way.
Featured articles
Preserving Order in Concurrent Go Apps: Three Approaches Compared - Viktor Nikolaiev's blog
It's the nature of concurrent processing that ordering of processed data is lost. Viktor Nikolaiev demonstrates three ways of restoring the correct order of data when concurrent workers return their results.
Implementing Forth in Go and C - Eli Bendersky's website
Who knows the Forth programming language? (Or: Tell me you're old without telling me you're old.)
Forth was one of the first programming languages I tinkered with. It was on an Atari ST, back in the 1980s. Now you can tinker with Forth too, or at least see how to implement this rather simple stack-based language in Go and C.
Testing Time (and other asynchronicities) - The Go Programming Language
"The simplest way to test an asyncronous function is not to do it." Yeah, but the world is never simple...
Podcast corner
Cup o' Go | 🇲🇽 Café con Go, 🇨🇦 GopherCon, eh?, or 🌉 Goroutines on the Golden Gate?
Your weekly ear massage with the finest Go news!
Fallthrough | How To Have A Great Conference Experience
Or: How to GopherCon. A beginner's guide to gaining insights and happiness while surrounded by fellow nerds. Can't be so difficult, or can it?
Spotlight: Every language is worth criticizing, but...
I've noticed a few quite negative blogs about go lately. And a 5-year-old one even got recycled in r/golang
this week. (I intentionally don't include links to them here, as I don't want to do any finger pointing. I'm sure you came across such blogs, too.) These blogs tend to zoom in on details of Go that weren't designed well in the authors' opinions, often delivered in a negative tone.
Don't get me wrong: Some criticisms are certainly valid, and pointing out genuine shortcomings is how a language evolves and improves. However, many of these rants are only expressing the author's dislike for a particular design decision that other languages do differently (but not necessarily better). There is a difference between constructive criticism and language rants that superficially pick nits, just for the sake of complaining. Those don't really help anyone.
All languages have flaws
The truth is: all languages have flaws. There is no such thing as a perfect language. This is why there's always someone who invents a new language that is supposed to be better than the existing ones, avoiding their shortcomings. But in decades of inventing higher-level programming languages, the one perfect language that is clear and precise with no foot slings and pitfalls, still doesn't exist. And it probably never will.
The reason is that language design involves countless tradeoffs. Every decision optimizes for certain use cases while potentially making others more difficult. What feels intuitive to one programmer seems counterintuitive to another. What works beautifully in one domain creates friction in another.
Be pragmatic
This is my advice to everyone who is prone to getting mad at language flaws (and I'm not excluding myself): Pick a pragmatic approach. When you learn a new language, you'll inevitably stumble over some details that are difficult to grok, seem counterintuitive, overly complicated, or otherwise flawed. Maybe they are, maybe it's only your perception, shaped by years of internalizing the concepts of other languages. Your "muscle memory" wants to type code the old way, and anything different can feel wrong.
Instead of getting stuck, try this: If you find a (true or perceived) shortcoming, learn why it's there. Understand its background, history, and raison d'être. Then learn how to use it right (or avoid it if you must) and move on. Remember you'll get productive in a language by learning to use its good parts well, not by starting a personal crusade against its flaws.
People have built great things in lesser languages than Go. It's just a matter of the right mindset and decent skills (that anybody can acquire). Go does have a few rough edges, but it certainly does a whole lot of things right. Look at the bigger picture, rather than the small details. You'll always be able to find a fly in the ointment if you look hard enough. But then, what have you won? The ones that understand and use all the great features of a language will be miles ahead while your mind is still busy finding nits to pick.
Quote of the Week: For those of us who have to use JS sometimes, how do you stay sane? : r/golang
Frontend dev here, I use JS and TS on weekdays,
I study Go to stay sane.
More articles, videos, talks
Trying out Bubble Tea (TUI) — sharing my experience
Quick insights and tips for Bubbletea newcomers.
Fuzz Testing Go HTTP Services - by Alex Pliutau
Fuzz testing explained with HTTP service testing.
Waitgroups: what they are, how to use them and what changed with Go 1.25 - mfbmina.dev
How waitgroups changed in Go 1.25.
Building Ebitengine Games for Web Browsers - YouTube
Ebitengine is a multi-platform game engine. This video shows how to compile an Ebitengine game to WebAssembly for use in the browser.
Go Struct Alignment: a Practical Guide | by | Aug, 2025 | Medium
Granted, struct alignment optimization is a form of micro-optimization that only pays off in tight memory situations. But on one fine day, you may find yourself struggling with memory optimizations, wishing you had bookmarked this article.
The 9 Go test assertions I use (and why) – Alex Edwards
How do you use test assertions? None at all? The minimalistic way? Or a full assertion suite?
In Alex Edwards' experience, the sweet spot is nine assertion functions, and he explains why assertion functions aren't an anti-pattern.
Projects
Libraries
GitHub - razshare/frizzante: An opinionated web server framework written in Go that uses Svelte to render web pages.
Switch render modes at runtime, use web sockets and server-side events, and use the frizzante CLI to manage your project's lifecycle.
GitHub - gen2brain/alsa: Go reimplementation of TinyALSA
Want to have fun with audio devices on Linux? gen2brain/alsa
opens the door.
GitHub - Atheer-Ganayem/SnapWS: Minimal WebSocket library for Go.
WebSockets are pretty low-level. Want a connection manager? Concurrency-safe rooms? Rate limiting? Ping-pong handling? SnapWS has it.
GitHub - marcuswu/makercad: Go library for Computer Aided Design
If you like OpenSCAD, you might love MakerCAD, a Go package for creating 3D CAD designs. Not an everyday kind of library.
GitHub - JJJJJJack/go-template-docx: Template engine for docx documents, with image loading, loops and charts support
After text/template
and html/template
, there's docx/template
. Or rather, go-template-docx
.
Tools and applications
GitHub - nao1215/sqly: eaisly execute SQL against CSV/TSV/LTSV/JSON and Microsoft Excel™ with shell.
Want to query a CSV file? SQL. A TSV file? SQL. LTSV? SQL.
GitHub - jams246/blazing-fast-idiomatic-go
Be sure to read the post on /r/golang!
GitHub - jms-guy/greed
"Nice real-world project—instead of yet another “blazingly fast” post, you’re showing a working stack." – /u/zmey56
Completely unrelated to Go
Big O
Big O helps to understand different categories of performance, and this article by Sam Rose helps to understand Big O through interactive graphics.
Frankly, all of Sam's interactive articles feel like they require O(n^2) effort to make!

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