<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
<title>Learn Go</title>
<link>https://learn-go.org/</link>
<description>Free Go tutorials, plus why Go is the highest-leverage language for agent-assisted development.</description>
<lastBuildDate>Sun, 06 Sep 2026 03:07:12 GMT</lastBuildDate>
<item><title>Hello, World!</title><link>https://learn-go.org/hello-world/</link><guid>https://learn-go.org/hello-world/</guid><description>Welcome to the first tutorial. In this tutorial you will learn how to write your first line of code.</description></item>
<item><title>The Go mistakes language models actually make</title><link>https://learn-go.org/review/failure-modes/</link><guid>https://learn-go.org/review/failure-modes/</guid><description>The compiler catches most of it. This is the list of what gets through — almost all of it concurrency.</description></item>
<item><title>Variables</title><link>https://learn-go.org/variables/</link><guid>https://learn-go.org/variables/</guid><description>A variable is a name given to a storage area that the programs can manipulate.</description></item>
<item><title>Why Go is the best language for agent-assisted development</title><link>https://learn-go.org/ai/why-go/</link><guid>https://learn-go.org/ai/why-go/</guid><description>Small spec, explicit errors, one formatter, a compiler that refuses to look away. Every property that made Go boring makes it exceptional to hand to a machine.</description></item>
<item><title>Arrays</title><link>https://learn-go.org/arrays/</link><guid>https://learn-go.org/arrays/</guid><description>Arrays are essentially storage spaces that can be filled with as much data as one would like. Variables, unlike arrays, can only contain one piece of data.</description></item>
<item><title>Conditions and Switch</title><link>https://learn-go.org/conditions/</link><guid>https://learn-go.org/conditions/</guid><description>Go has one conditional statement and one switch, and both do more than their equivalents elsewhere.</description></item>
<item><title>Dependency hygiene for Go modules</title><link>https://learn-go.org/review/dependencies/</link><guid>https://learn-go.org/review/dependencies/</guid><description>Go's module system already solves most of what goes wrong elsewhere. What is left is hallucinated import paths, and the handful of directives that quietly disable the guarantees.</description></item>
<item><title>Writing an AGENTS.md for Go</title><link>https://learn-go.org/ai/agents-md/</link><guid>https://learn-go.org/ai/agents-md/</guid><description>Go needs a shorter instructions file than any other language, because the compiler already enforces most of what you would otherwise write down.</description></item>
<item><title>Loops</title><link>https://learn-go.org/loops/</link><guid>https://learn-go.org/loops/</guid><description>Go has only one looping construct, the for loop.</description></item>
<item><title>Security review checklist for AI-generated Go</title><link>https://learn-go.org/review/security/</link><guid>https://learn-go.org/review/security/</guid><description>Go's standard library gets most things right by default, which means the vulnerabilities that survive are the ones where you chose the wrong stdlib package.</description></item>
<item><title>Testing Go that calls a language model</title><link>https://learn-go.org/ai/evals/</link><guid>https://learn-go.org/ai/evals/</guid><description>Go is increasingly the language the AI infrastructure is written in rather than the AI feature. That changes what you test — and interfaces plus httptest make it unusually pleasant.</description></item>
<item><title>Functions</title><link>https://learn-go.org/functions/</link><guid>https://learn-go.org/functions/</guid><description>Multiple return values, named results, variadics, closures — and the error convention that shapes every Go API.</description></item>
<item><title>The performance traps in generated Go</title><link>https://learn-go.org/review/performance/</link><guid>https://learn-go.org/review/performance/</guid><description>Go's performance problems are almost all allocations and unbounded concurrency — and the toolchain will tell you about both if you ask it.</description></item>
<item><title>Tracking and cutting token costs in Go</title><link>https://learn-go.org/ai/tokenomics/</link><guid>https://learn-go.org/ai/tokenomics/</guid><description>Go is usually the thing in front of the model rather than the thing calling it — which makes it the right place to enforce budgets, cancel abandoned work and expose the metrics.</description></item>
<item><title>Slices and maps</title><link>https://learn-go.org/slices-and-maps/</link><guid>https://learn-go.org/slices-and-maps/</guid><description>The two data structures you will use constantly, and the aliasing behaviour that surprises everyone once.</description></item>
<item><title>Structs and interfaces</title><link>https://learn-go.org/structs-and-interfaces/</link><guid>https://learn-go.org/structs-and-interfaces/</guid><description>Go has no classes and no inheritance. It has structs, methods and implicitly satisfied interfaces — which turns out to be enough.</description></item>
<item><title>Errors</title><link>https://learn-go.org/errors/</link><guid>https://learn-go.org/errors/</guid><description>Go's most distinctive design decision. Verbose, explicit, and the reason generated Go rarely swallows a failure.</description></item>
<item><title>Methods and Pointers</title><link>https://learn-go.org/methods-and-pointers/</link><guid>https://learn-go.org/methods-and-pointers/</guid><description>Pointers in Go are simple by design: no arithmetic, no manual freeing. The one decision you make repeatedly is value receiver or pointer receiver.</description></item>
<item><title>Goroutines and channels</title><link>https://learn-go.org/concurrency/</link><guid>https://learn-go.org/concurrency/</guid><description>Go's headline feature, and the one place where the compiler stops protecting you.</description></item>
<item><title>Strings and Runes</title><link>https://learn-go.org/strings-and-runes/</link><guid>https://learn-go.org/strings-and-runes/</guid><description>A Go string is a read-only slice of bytes, not characters. Understanding that distinction prevents a specific and common category of bug.</description></item>
<item><title>Packages and Modules</title><link>https://learn-go.org/packages-and-modules/</link><guid>https://learn-go.org/packages-and-modules/</guid><description>How Go code is organised, why a capital letter is the only access modifier you get, and what go.mod actually does.</description></item>
<item><title>Defer, Panic and Recover</title><link>https://learn-go.org/defer-panic-recover/</link><guid>https://learn-go.org/defer-panic-recover/</guid><description>Go's cleanup mechanism, its crash mechanism, and the narrow set of cases where catching a crash is the right thing to do.</description></item>
<item><title>Testing</title><link>https://learn-go.org/testing/</link><guid>https://learn-go.org/testing/</guid><description>Testing ships with the language. Table-driven tests, subtests, benchmarks and the race detector all come from one command.</description></item>
<item><title>JSON and File I/O</title><link>https://learn-go.org/json-and-io/</link><guid>https://learn-go.org/json-and-io/</guid><description>Struct tags, the reader and writer interfaces that unify all I/O in Go, and the capitalisation mistake that silently drops your fields.</description></item>
<item><title>Generics</title><link>https://learn-go.org/generics/</link><guid>https://learn-go.org/generics/</guid><description>Type parameters arrived late to Go and the community uses them sparingly. Here is the everyday use, and why restraint is the right default.</description></item>
</channel></rss>