2 make || ! 2 make Hi , Few software tools survive for decades almost unchanged. A build tool named make is one of these. Is it a good fit for Go? In this week's Spotlight, I focus on one particular aspect of make and make-like tools: How file changes are detected. A quick announ … | Continue reading
1111 Years Hi , Go turned 1111 years, or 15 if converted to decimal. That's still young, compared to (even more) established languages like Java or C++. But it's been a long and eventful journey. The most astonishing aspect, however, is that Go remained true to itself. It's still … | Continue reading
Go Practical! Hi , Today's issue is all about practical Go! Build a system monitor, write secure code, understand sync.Once, listen to the creators of Elvish and Fyne, take part in some aha moments, learn how to apply TeeReader and MultiReader to an audio mixing problem, or see a … | Continue reading
First Principles First! Hi , Back to the basics: How does an HTTP router work? How does Go's time formatting work? How does fuzz testing work? I think that once in a while, it can't hurt to gather some fundamental knowledge or refill a few memory cells with basic patterns and mec … | Continue reading
A Liberating Language Hi , How important is the choice of language for the success of a project, in the short and long term? Some programmers consider one language as good as another; they learn dozens of them but none deeper than the basics. A few are brilliant enough to gain de … | Continue reading
Of tests, goats, and swiss tables Hi , Binary size is usually not a problem... until it is. If the usual methods of shrinking binaries aren't sufficient, a possible culprit is the reflect package, or specifically, four methods of this package, which is this week's Spotlight. But … | Continue reading
To Bot Or Not To Bot? Hi , LLMs are getting better every few months, and the discussions about the pros and cons enter a new round every time a new model is released. Some claim to observe skyrocketing productivity, others warn about decay in code quality, up to producing severe … | Continue reading
Did you ever try mentioning to functional programming purists that Go has some aspects of functional programming (specifically, functions as first-class citizens)? How did they react? Chances are that they immediately listed a ton of reasons why Go cannot be functional in any reg … | Continue reading
"Go has garbage collection and therefore can never be considered a high-speed language." Um, wrong. Speed is relative, and Go is orders of magnitudes faster than dynamically typed, interpreted scripting languages, so the garbage collector certainly isn't a major factor in applica … | Continue reading
What's your preferred configuration language? YAML, JSON, TOML, or environment variables? Or do you suffer from a general configuration language allergy? Maybe there's a CUrE. Now you're CUErious, huh? Not so fast. First, you have to read through the featured articles, one by one … | Continue reading
When I wrote this week's spotlight, these lines from Tears For Fears' song "Mad World" came to my mind: I find it hard to tell you 'Cause I find it hard to take When people run in circles It's a very, very Mad world The spotlight's topic is much more trivial than this classic wel … | Continue reading
Contrary to my usual habits, I decided to include two project in the Featured section that are the results of great personal dedication and persistence. They caught my eye as they are perfect examples of successful, non-trivial projects a single person can pull off. These two pro … | Continue reading
Beware of over-engineering. Sometimes, a quick hack is sufficient. This week's spotlight describes an example: Instead of selecting a CLI command library and implementing commands and subcommands in Go, you can use a quick hack to unite independent CLI tools under a parent comman … | Continue reading
Magic can be wonderful. Shake a wand like a conductor of an orchestra and turn that impenetrable door into dust. Quaff a magic potion and gain enough superpowers to beat up a cohort of Roman soldiers in 50 BC. Use The Force to levitate an x-wing fighter. Even programming language … | Continue reading
This week, I struggled with a codebase that I hadn't touched for a while. What a mess! My brains worked hard to reconstruct how all the parts work together, and why I made this decision over another back when I wrote that code. But all the time, I realized that Go's direct and no … | Continue reading
Humans love to communicate, and likewise does the software they create. To communicate over a distance, humans use telephones, email, or text or video chat, while software uses REST APIs (among other options). The OpenAPI standard facilitates reasoning about APIs by providing a f … | Continue reading
You know that a new Go release is coming when the number of release-specific articles spikes. This issue contains another article, another podcast, and a Go Tip about Go 1.23. Among all the new and improved features, there is one that is perhaps the most controversial: telemetry. … | Continue reading
Go is said to be the language for backend infrastructure and CLI tools. Nevertheless, countless projects relentlessly work on establishing Go in other spaces: Game engines like Ebitengine, blockchain software like go-ethereum, embedded Go editions like TinyGo, or AI frameworks li … | Continue reading
Slowly, the newsletter gets out of summer break mode. The most surprising article of the week (for me) is Russ Cox's article about the new bisect tool, right below in the Featured Articles section. And the most eye-opening article of the week (again, for me) is the very last one, … | Continue reading
When it's rainy outside, or sunny, cloudy, hot, or cold—weather doesn't matter that much, honestly—, I sometimes think about the future of Go. Will AI code generation make programming skills and language mastery irrelevant? Or will Go rather play an increasingly important role in … | Continue reading
Summer Break! This is the first issue during the summer break. It's much smaller than usual, but I still managed to include some articles from this week. Only featured articles! Next week's issue (on Sun July 14th) will be a 100% "canned" one as I'll be AFK for most of the time. … | Continue reading
Have you heard of the Polyfill attack? Shortly after the Polyfill.js project and domain changed owner, the Polyfill servers injected malware into 100k+ sites, making potentially millions of mobile devices visiting these sites vulnerable to that malware. Software supply chains get … | Continue reading
Go's language specification is rock stable, compared to other languages (looking at you, C++!). The Go team is very careful about approving new features to the language, and yet, Go has gotten type parameters (aka generics) and is about to get new function iterators. Not to menti … | Continue reading
The world is constantly evolving, no doubt! The question, however, is: in which direction? Mostly towards increasing complexity (see also last week's issue). Sometimes also backwards. Web development, for example, has evolved from serving static pages to single-page applications— … | Continue reading
Complexity is everyone's favorite, right? Of course not, but how come that systems, particularly software systems, always seem to tend towards increased complexity? Maybe it's a lack of planning or failure to manage organic growth. But maybe it's the innocent wish of adding new, … | Continue reading
Curiosity skills the cat! Usually, hardware speed improvements cannot be emulated by software on older hardware. Because without the new kind of hardware acceleration, how should software become faster? Here is an example where hardware acceleration actually leads to faster softw … | Continue reading
Do you remember the Go Tip from two weeks ago? I listed three anti-patterns, including dot imports. Dot imports are rightly said to pollute the namespace of the importing package and make understanding the code harder. But still, if certain imported identifiers are used intensely … | Continue reading
Whether you build an online service in Go as a side project or for your business, at one point you have to decide where and how to host your service. Should you rent a proprietary hosting solution, or better grab some open-source software and start hosting everything by yourself? … | Continue reading
This week, let's start with two actionable articles. Write a Web app with JetBrains and explore a coding problem that has no optimal solution (but at least, it has one). Also worth noting: Encore goes open source! In the recent months, we have seen the opposite happening. First, … | Continue reading
Today — the day this newsletter has found your inbox — is the Revenge of the Fifth day, following the May the Fourth Be With You day. Obviously, this weekend is in Star Wars mode. Which reminds me of the probably most famous spaceship ever, the Millenium Falcon. Did you know that … | Continue reading
A Go developer and a Rust developer meet in a chatroom... This could be the start of a lame joke about Go vs Rust, but it actually happened — except that the two "developers" were LLM-based bots, one written in Go, the other in Rust. How can you tell the two were bots? They were … | Continue reading
What happened last week? Well, if there is anything I can brag about, I added a dark mode to appliedgo.net. Yay. This was in the back of my head for a long time, and whenever my computer switched to dark mode in the evening and I browsed websites that don't adapt to dark mode, I … | Continue reading
Choose your programming language wisely! Those of you who already have worked with several languages know what I mean. I reckon you won't disagree when I say that Go is a wise choice for many requirements. The latest Go Developer Survey results support this: 93% of the respondent … | Continue reading
Recently, I have been thinking about the role of IT in consumption of natural resources and carbon dioxide production. Two areas truly stand out: Blockchains and Generative AI. Bitcoin's energy consumption per year equals that of Egypt. Or Malaysia, or Sweden, depending on who yo … | Continue reading
You may have read about Codapi.org here one or two times. Codapi is a service for embedding runnable code snippets of almost any language into Web pages — and not only that: Recently, Anton Zhiyanov, the author of Codapi, created an interactive Caddy tutorial. You can fire up a C … | Continue reading
In earlier issues of this newlsetter (like this one), I mentioned Codapi.org, a universal, embeddable code playground. Recently, Codapi author Anton Zhiyanov added a growing list of "Try X in Y minutes" pages, which are executable versions of the famous "Learn X in Y minutes" pag … | Continue reading
Recently, I used some AI chatbot again for quickly generating some code I was too lazy writing myself. Then, I came across an ambitioned company that works on building an AI software engineer. No, I don't want to spawn another will-AI-replace-our-jobs discussion. Indeed, I am ske … | Continue reading
Go's intricacies know no bounds - from interface smuggling that augments implementations to the surprising impact of pre-allocating slices. But amid the technical depths, a programmer's musings on embracing simplicity over engineering complexities strike a resonant chord. Sorry. … | Continue reading
JuiceFS, Bacalhau,... I stumbled over quite a few applications Written In Go™ lately. It's amazing to see what cool things people make possible with Go. But it's absolutely jaw-dropping to see how someone uses Go to hold a disease at bay. 👇 More below! 👇 ʕ◔ϖ◔ʔ Of … | Continue reading
A Gopher, an Enum and an Undefined walk into a bar... I don't know how to continue that joke, but after reading the article on enums and the Go Tip on undefined JSON data, perhaps you can come up with a punch line. But more realistically, you probably will be tackling the one bil … | Continue reading
What's your best practice for writing HTTP servers? I bet there are as many opinions on good HTTP server design as there are Go developers. But there's nothing wrong with learning from experienced Gophers. Speaking of best practices, maintaining a low number of dependencies is no … | Continue reading
Is it already half a year since I posted an article on appliedgo.com/blog? It is, obviously. (Note to self: Reserve more time for writing articles.) Luckily, every Go release is a great topic to write about. The downside: Everyone(*) else writes about the latest Go release, too. … | Continue reading
Whew! Two strange and busy weeks are now behind me. Two weeks of testing and tweaking, talking to tech support, tweaking again, weighing pros and cons, and finally deciding to move away from my mailing provider. Going forward, I send this newsletter via Buttondown.email. There ar … | Continue reading
A message to my readers: The previous issue had some problems and got delayed by over a week for many readers. Furthermore, the new platform of my mailing provider has some serious bugs. One of these bugs tricked me into re-sending the previous issue to everyone, not just to thos … | Continue reading