Big Things Will Happen • The Applied Go Weekly Newsletter 2025-01-12
Your weekly source of Go news, tips, and projects
Big Things Will Happen
Hi ,
Welcome back to the first issue after the winter break! The newsletter is back with the full program: articles, podcasts, quotes, spotlights, projects, and something completely unrelated. Read it, contemplate over it, and maybe share it with your friends. But most of all, enjoy it.
Featured articles
Revealing Golang’s Secret Sauce: A Deep Dive into Its Internals | by Meet Soni | Jan, 2025 | Medium
If you want your app go faster, you'd better know the fundamentals of Go's internal mechanisms: The goroutine scheduler, memory management, stack allocation, garbage collection, and compile-time escape analysis.
Why CGO is Dangerous - YouTube
The worlds of Go and C couldn't be farther away from each other—at least, with regard to their internals. Hence Go has no nice'n'easy bridge to C; rather, a variant named Cgo attempts to connect the worlds of Go and C.
DebugString(): a handy pseudo-standard for Go libraries
The Stringer
type is the standard way of making an object print itself. A DebugStringer
is the equivalent of Stringer
for debugging. DebugStringer
is only a pseudo-standard, but 50% of the popular Go IDEs (i.e., GoLand) support DebugString()
.
Podcast corner
Cup o' Go: 🗓️ 2025 conference preview, GoReleaser enhancements, and whether to use assertion libraries
Starting into 2025, Jonathan and Shay share some lists: Upcoming Go conferences, Go newsletters, and—holy mackerel! The Applied Go Weekly Newsletter is listed, too!
This is a terrible mistake!! Now this issue links to the Cup o' Go episode that links to this issue that links to the Cup o' Go episode that links back to this issue... an infinite loop! 😱
Spotlight: Big Things Will Happen
Big things will happen in 2025, for better or for worse. You cannot influence everything and everyone around you, yet you aren't bound to be a mere spectator.
Within your circle of influence, you can move more things than you might think. As a gopher, you can use your software development skills to build software that helps people (including yourself) live a better life. It doesn't matter whether you are working in a large or small company, whether you have been laid off by the big ones, or whether you work through the ups and downs of the freelance IT market. The software you create can make a difference in a lot of ways:
- Independence and sovereignty: Centralized services are convenient, but the concentration of power to a few companies can quickly turn favors against their users. Once the users are locked in to a service, the vendor can stop caring about their users and start milking them to the last drop while constantly working on the enshittification of their services. As gophers, we can build software that makes users independent of centralized vendors and sovereigns over their own data.
- Resilience and reliability: Software bloat and architectural bloat is avoidable, but it takes effort. We have witnessed languages and software systems grow from lean and easy-to-learn entities to bulky, unwieldy feature behemoths. Over the 15 years of its existence, Go has managed to remain simple and accessible, ideally suited to build robust and maintainable systems.
-
Efficiency and performance for a greener future: When throughput of SaaS systems hits a limit, the typical reaction is to add more or bigger hardware. Smart companies realized that the real bottleneck was the interpreted language they used. Consequently, they turned to re-implementing their services in compiled, performant languages.
Go particularly stands out here, as it has a great appeal to scripting language users: The insane compile time and the quite accessible type system make Go a low-barrier option for switching to a fast, compiled language. Moreover, Go's straightforward package system is ideal for constructing efficient architectures and getting decent performance out of old and slow hardware (down to microcontrollers, thanks to TinyGo). Less IT garbage, less energy used.
- Community and empowerment: A horrible idea: All people in this world would look, think, and act the same. Pluralism is the foundation of developing societies. History has proven this: Whenever two cultures merge peacefully, a new, richer culture emerges. Software, purposefully created, can foster such development. Communities that have built around Go prove that inclusivity is possible and a net positive for everyone: Golang Bridge empowers underrepresented groups in tech, and Women Who Go supports women in a tech world dominated by males.
- Sustainable software: Sustainability has many different facets, and gophers are in an optimal position to support all of them: Environmental sustainability through building efficient software; economic sustainability through keeping source code maintainable (easy with Go); social sustainability through keeping up ethical practices, diversity, and inclusion; and techniacal sustainability by writing code that is easy to evolve, adapt, and maintain.
- An improved business and life: If you want to make the world a better place, you need to start with your own life. You cannot take care of improving the world if you don't care about yourself. If you're stuck in a rut, if you struggle to make ends meet, if you feel your life is going nowhere, 2005 may be the year of a restart. Your ability to craft beautiful software in Go could be the key to a better life. Improve your life, and you are in the best position to improve others' lives as well.
What are you waiting for? Use the great tool at your hand to gently push the world where you want to have it. If you haven't made any New Year's resolution yet, how about embracing this goal for 2025 (pun intended):
Go for a better world.
Links:
Quote of the Week: No fix needed
As a recovering C++ developer, I love Go's error handling. I do not think it is broken and therefore needs no fixing.
More articles, videos, talks
Easy Auto-Reload with Server-Sent Events in Go - ffss.dev
Manual browser reload is so yesteryear. Server-side events make your frontend refresh at the server's convenience.
Golang’s Exiciting Future! | 1.24 | json/v2 | Unions | Opaque Protobuf API - YouTube
Go 1.24 in five and a half minutes.
Write Your Own json.Unmarshal
Go and JSON don't go well together. The dynamic nature of JSON requires jumping a few hoops to get JSON data into static data structures. There are a lot of JSON parsers out there, but if you want to know what to look out for when choosing one, knowing how to write one may turn out to be valuable.
Marker Interfaces in Go. This article is about Marker… | by Andrei Boar | Jan, 2025 | Medium
Marker Interfaces may seem to contradict the principle of clarity, as they repurpose a no-op function declaration as sort of a type flag. Andrei Boar examines the rationale behind this untypical construct.
noCopy convention - Unskilled
A nice trick from the depths of go vet
.
Clean Architecture: A Practical Example of Dependency Inversion in Go using Plugins · cekrem.github.io
Dependency Inversion nicely explained on a real-world example implementing a plugin system. Side note: Consider the warnings of the plugin
documentation before deciding to use the plugin
package.
if got, want: A Simple Way to Write Better Go Tests
My IDE extension for Go generates table-driven tests with almost the same syntax, but ultimately, the underlying, game-changing habit is to use the names got
and want
consistently.
10 years of functional options and key lessons Learned along the way
Not every gopher loves them, but every gopher should know them: Functional options.
Projects
Libraries
GitHub - scott-mescudi/stegano: The fastest steganography library built for go
Add an invisible watermark to your pictures. Or hide data inside images. Just ensure nobody sends the image through a filter or format converter...
Expr Lang: Go centric expression language for dynamic configurations - WunderGraph
How to manage dynamic configurations? Compiled code is immutable without re-compiling, and YAML is too inflexible. The Go-centric expression language Expr Lang promises a way out of the dilemma. WunderGraph developed this language after exploring options like Go templates, CEL, and embedded JS engines.
Tools and applications
GitHub - zasper-io/zasper: Supercharged IDE for Data Science
A fast, lightweight JupyterLab alternative.
Introducing grpcmd-gui: A modern desktop app for gRPC API development and testing | grpcmd
A lightweight gRPC test app, built with Wails, Vite, React, shadcn/ui, and TailwindCSS. Bonus points for being installable via Homebrew.
GitHub - shraddhaag/aoc: Solutions to Advent of Code.
If you got stuck with some of the Advent Of Code challenges, have a peek into this repo.
GitHub - okieraised/go-license-management: license management api
Create and manage perpetual, timed, floating, or other service licenses. (WIP)
GitHub - atinylittleshell/gsh: A modern, POSIX-compatible, generative shell
What does a generative shell generate? gsh
uses AI (hence the "generative") to suggest or explain commands, or have agents run commands or write code for you.
Dendy Emulator (WASM)
Dendy, a NES emulator, now runs in a browser, thanks to WASM.
GitHub - teilomillet/hapax: The reliability layer between your code and LLM providers.
AI services are different from "normal" services: Their responses are inherently insecure, especially if they are used to trigger actions. Hapax provides security features like request validation and sanitization, circuit breaking options, and monitoring through Prometheus.
GitHub - MoMus2000/Boa: Boa: The language you didn't know you needed, but here we are.
Languages galore! Boa is a language inspired by Lox, originally intended to be written in Rust, then implemented in Python and finally ported to Go for speed.
Completely unrelated to Go
Some Programming Language Ideas - iRi
Jerf, your friendly /r/golang
moderator, thinks up features for new programming languages. Have you ever dreamt of languages that are semi-dynamic, or languages that make the object-relational impedance mismatch (the root of all ORMs) go away? No worries if you haven't yet; Jerf does it for you.
Can LLMs write better code if you keep asking them to “write better code”?
Imagine you are a senior developer. (Maybe you are.) If you tell a junior developer repeatedly to "write better code", would the code end up being the best possible one?
Probably not.
But... maybe... an LLM is different?
The day I taught AI to read code like a Senior Developer
AIs may be meh at writing code, but what about reviewing code? Still meh... unless it focuses on the same details a senior dev would.
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