SystemGo
The Go docs you must read (not optional)¶
🔹 “Effective Go”¶
Read it slowly, not once, multiple times.
This is where:
-
pointer usage clicks
-
method vs function decisions make sense
-
package structure stops feeling random
👉 https://go.dev/doc/effective_go
If you skip this, everything else is harder.
🔹 context package docs¶
Not tutorials — the actual docs.
Key thing to learn:
Context is for control, not for data plumbing.
Frameworks abuse it. System tools should not.
2️⃣ Read real system Go code (this is critical)¶
Tutorials won’t teach you judgment. Codebases will.
🔹 Study these projects¶
Read them like literature.
-
docker / moby
-
caddy
-
traefik
-
prometheus
-
hashicorp/consul
-
hashicorp/nomad
Don’t clone and run.
Open files and ask:
-
why is this a value?
-
why is this a pointer?
-
why is this package named this?
That’s how taste develops.
3️⃣ Learn from the standard library (best teacher)¶
The stdlib is the reference implementation of Go style.
Start with:
-
net -
net/http(server AND client) -
os -
exec -
bufio -
sync -
context -
encoding/json
Example mindset:
If the stdlib avoids abstraction, so should I.
4️⃣ Concurrency: learn it the hard way (there is no shortcut)¶
Ignore YouTube concurrency hype.
Read:
-
https://go.dev/doc/effective_go#concurrency
Then build:
-
worker pool
-
bounded channel
-
cancellation with SIGTERM
-
timeout-controlled goroutines
Until you kill your own goroutines accidentally, you haven’t learned it.
5️⃣ Read how UNIX tools are designed (not Go-specific)¶
Your tool is a modern Unix utility.
Learn from:
-
dig -
tcpdump -
curl -
rsync -
strace
Principles:
-
single binary
-
composable output
-
flags over config files
-
exit codes matter
Go maps extremely well to this model.
6️⃣ Books worth your time (few, but good)¶
✅ “The Go Programming Language” (Donovan & Kernighan)¶
This is not outdated.
It teaches:
-
thinking in Go
-
simplicity discipline
-
correctness over cleverness
⚠️ Skip most “Advanced Go” books¶
They tend to:
-
over-abstract
-
push patterns prematurely
-
optimize imaginary problems
7️⃣ How you specifically should learn (tailored advice)¶
Given:
-
you build CLIs
-
you parse logs
-
you inspect systems
-
you care about correctness
Your best learning loop is:
-
Build a tool
-
Feel pain
-
Read stdlib / real code
-
Refactor
-
Repeat
No course can replace that.
8️⃣ The uncomfortable truth¶
You’re already past beginner level.
Your confusion isn’t ignorance — it’s:
-
lack of vocabulary
-
lack of pattern recognition
-
lack of exposure to good Go