Table of Contents
❓ FAQ & Troubleshooting¶
About this repo¶
What is this repository?
A public six-month learning journal documenting my path from zero to production-grade Go backend engineering. It's simultaneously my notes, my portfolio, and a resource other learners can follow. Start at the [README](README.md) and [ROADMAP](ROADMAP.md).Can I follow along even though it's your personal journal?
Yes — that's a goal. Follow the [ROADMAP](ROADMAP.md) day by day, attempt the [projects](projects/) and [exercises](exercises/) yourself before reading my notes, and use the [interview bank](interview/) for retrieval practice. ⭐ Star to follow.How much time per day does this take?
Plan for **1.5–3 focused hours/day**. The roadmap is sized for ~2h. Consistency beats intensity — a daily streak is part of the method.Do I need a CS degree or prior programming experience?
No degree. Some prior programming helps but isn't required — Month 1 starts from zero. If Go is your first language, slow down Weeks 1–2 and do extra [Exercism](https://exercism.org/tracks/go) problems.Methodology¶
Why all the journaling and reviews?
Because retention, not exposure, is the goal. The daily recall quizzes (Active Recall), weekly/monthly reviews (Spaced Repetition), and "explain it simply" sections (Feynman Technique) are evidence-based learning techniques. See [`docs/RESEARCH.md`](docs/RESEARCH.md).What's the daily workflow?
1. `./scripts/new-day.sh` to scaffold today's note. 2. Follow the roadmap. 3. Code in the relevant folder. 4. Fill the note (notes, mistakes, recall, reflection). 5. Commit with a Conventional Commit. See [CONTRIBUTING](CONTRIBUTING.md).Go setup & troubleshooting¶
How do I install Go?
Download from [go.dev/dl](https://go.dev/dl/), or use a version manager. Verify with `go version`. Initialize a module with `go mod initgo: command not found
Go's `bin` isn't on your `PATH`. Add `export PATH=$PATH:/usr/local/go/bin` (and `$(go env GOPATH)/bin`) to your shell profile, then restart the shell.
go: cannot find main module / go.mod file not found
You're outside a module. Run `go mod init example.com/yourname/project` in your project root, or `cd` into the module directory.
My imports won't resolve / editor shows red squiggles.
Run `go mod tidy` to sync dependencies, ensure `gopls` is installed (`go install golang.org/x/tools/gopls@latest`), and that your editor's working directory is the module root.go test says "no test files".
Tests live in `_test.go` files in the same package, with functions named `TestXxx(t *testing.T)`. Run `go test ./...` from the module root to test all packages.
How do I find data races?
Run with the race detector: `go test -race ./...` or `go run -race main.go`. Fix every reported race — they are real bugs, not warnings.Why is my goroutine not running / program exits early?
`main` returning kills all goroutines. Synchronize with a `sync.WaitGroup` or a channel. A goroutine that blocks forever is a leak — give it an exit path (often via `context`).Common beginner gotchas
- Appending to a slice can mutate a slice that shares its backing array ([[slice-internals]]). - A loop variable was shared across iterations before Go 1.22 (fixed in 1.22+, but watch older code). - A nil interface holding a typed-nil pointer is not `== nil` ([[nil-interface-trap]]). - Writing to a `nil` map panics; reading is fine. - Unhandled errors — always check `if err != nil`.⬅ README · More gotchas in NOTES.md and interview/