Never Get Bored With The Basics • The Applied Go Weekly Newsletter 2025-09-14

Your weekly source of Go news, tips, and projects

Never Get Bored With The Basics
Hi ,
Are you ready for a journey? I am planning to do a Spotlight series about building a basic SaaS platform for minimalists. That means: no bloat, just the bare amount of code necessary, but still equipped with functionality needed in production. Minimalism is the core concept: You don't need containers, Kubernetes clusters, and a helluva infrastructure to run a solo business. In fact, small businesses can get quite far with a single app instance on a decent VM. Hyperscaling is a problem that a small business might not encounter for years, and if it happens to appear, it's a great problem to have, as it means the business is hugely successful. But when starting out, start small; be mean and lean until the situation demands otherwise.
Embrace minimalist software.
–Christoph
Featured articles
A new experimental Go API for JSON - The Go Programming Language
About the reasons that led to the development of the encoding/json/v2 package and how it works---currently, that is; because the package is still in experimental state.
Early return and goroutine leak | Redowan's Reflections
Honestly, who didn't produce a goroutine leak at some point in their Go career?
Go Goroutine Synchronization: a Practical Guide | by | Sep, 2025 | Medium
An intro to Go's synchronization mechanisms: Mutexes, Conds, WaitGroups, Pools, Once(), and sync.Map.
Podcast corner
Cup o' Go | 👕 Clothe your naked gophers and returns, with this one weird episode THEY don't want you to know about!
This week, Cup o' Go visits the fashion industry (or so it seems).
go podcast() | 059: Is Go over with John Arundel
If you don't know John Arundel yet, this is the chance to learn a bit about him and his love for Go that he has cast into book titles like "For The Love of Go" and "The Deeper Love of Go". Aren't we all Go lovers?
Fallthrough | Bootstrapping A Podcast
Kind of a sequel to the previous episode, "What It Takes To Be A Content Creator" (although not explicitly announced as such).
Spotlight: A minimalist SaaS platform 01: Intro
In the previous Spotlight, I wrote about the various aspects that make Go an ideal language for building minimalist software;that is, software that only contains code for doing the things at hand, no needless layers of abstractions, no "we might need this in the future" features. In short, the very opposite of FizzBuzz Enterprise Edition.
I decided to start building an application that incorporate minimalist principles: a platform for building software as a service. Not a full-blown, production-ready SaaS app; just the bare minimum that can serve as a basis to add a real app on top. Yet, I want to include enough pieces to make it useful out of the box.
Certainly, most of you are now like, "been there, done that." I feel you: my plan may sound like Yet Another Beginner's Project. But before you zap to another channel, remember that the best advice for getting great at one's profession is to never get bored with the basics. And it's always nice to have a detour from the daily grind of building Mega Corp apps with customer-requested feature bloat, isn't it.
As mentioned before, the project I'm starting will not turn into production-ready code. Instead, the goal is to explore the fundamental principles and building blocks of a SaaS app. Equipped with this knowledge, writing your own SaaS platform, as well as evaluating existing solutions for your purpose, becomes much easier.
So here's the plan: I'll start from the classic cliché "basic web server with net/http"...
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Gophers!")
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
...and add functionality piece by piece, such as:
- A minimal frontend
- Middleware
- Security
- Deployment
- A database
- User management
- Payment integration
and so forth.
I'm curious where this journey goes, and you're invited to follow along. Stay tuned!
Quote of the Week: The defense against slop and brainrot - by Paul Jun
If you can think well, AI becomes a multiplier. If you can't, AI just amplifies your mistakes.
More articles, videos, talks
Simpler & Faster Concurrent Testing With testing/synctest - Calhoun.io
Jon Calhoun presents a flaky test, inspects suboptimal fixes, and explores synctest's features for better concurrent testing.
Building a High-Performance Concurrent Live Leaderboard in Go - DEV Community
The fourth part of a series about concurrency.
Running Go tools in a browser
The blog title might be a bit misleading. It's not about running the Go toolchain in a browser (or any particular tool from Go's rich tool set). The tool is an assembler for a custom CPU platform.
GitHub - go-monk/from-bash-to-go-part-ii: Go for Bash programmers II - CLI tools
The second part of the From-Bash-To-Go series (see also the previous issue.
Projects
Libraries
GitHub - xjslang/xjs: eXtensible JavaScript parser
This JS parser focuses on minimalism, which forces the developer to give up a few JS features, but OTOH keeps the parser small and the JS code aligned to a "there's one way to do it" philosophy.
GitHub - yaml/go-yaml: The YAML org maintained fork of https://github.com/go-yaml/yaml
The YAMLorganization has forked Gustavo Niemeyer's archived gopkg.in/yaml.v3 into go.yaml.in/yaml/v4. A team of maintainers is taking care of the project.
GitHub - Neyylo/noise-reducer
While every second headphone brags with noise cancelling, this package humbly deals with noise reduction. The author created it for separating heartbeat sounds from the background noise, but surely the algorithm can be applied to a wide range of use cases.
GitHub - kristianJW54/GoferBroke: GoferBroke is a lightweight, extensible tool designed for building distributed clusters using an anti-entropy gossip protocol over custom binary TCP.
Whoa, that's a mouthful: "an anti-entropy gossip engine built on a custom binary TCP protocol." The point is, GoferBroke synchronizes application state across nodes using a peer-to-peer protocol, thus requiring no central broker instance. Use cases include global configuration, building meshes without a central instance, or node health checks.
GitHub - BrownNPC/Golang-Raylib-GameFramework: very basic template for creating games with raylib, with web support out of the box
While Ebitengine seems the most popular game engine for Go, Raylib (a C library) is worth a look. Up to now, the Go-Raylib bindings did not include web support. This package changes that.
Tools and applications
GitHub - rocajuanma/anvil: End manual app setup on macOS. Batch install development tools, sync configurations via GitHub, and troubleshoot issues —no virtualization, just smart automation.
Homebrew on steroids! With Anvil, you can set up a Mac quickly by installing complete groups of apps at once (utilizing Homebrew under the hood). Anvil's config (including standard and custom app groups) is synchronized to a remote git repo (currently only GitHub seems supported) to facilitate setting up multiple Macs (or just your next Mac).
GitHub - vrongmeal/mygopkg: A static site generator for hosting Go packages on custom domains
To make your packages available at a "vanity import path" (like my [what package](https://appliedgo.net/what) that is imported as appliedgo.net/what), you need a Web server that knows how to respond to go get or go mod download requests. You can set up one by hand or use this minimalistic static site generator.
GitHub - chinmay-sawant/gopdfsuit: GoPdfSuit is a comprehensive web application written in Go which can help you generate the pdf document without worrying about the PDF templating
Generate PDF from JSON templates. GoPdfSuit(e) supports "multiple page sizes, automatic page breaks, PDF merging, form filling, tables, borders, checkboxes, font styling (bold, italic, underline), and custom layouts without external dependencies." The author built this as an alternative to proprietary services.
plutov/oq: Terminal OpenAPI Spec viewer
You love OpenAPI specs and the command line? Here you go.
Completely unrelated to Go
Where's the Shovelware? Why AI Coding Claims Don't Add Up
Does AI coding assistance make developers faster or slower? Mike Judge did a (statistiacally not significant) self-study.
Introducing the MCP Registry | mcp blog
Discovering MCP servers gets easier, with this open source, central MCP registry. (Written in Go, BTW!)
Test state, not interactions | Redowan's Reflections
Don't let AI write your tests, and prefer hand-written fakes over mock libraries: Redowan's tips on how to not fail at creating good and useful tests.

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