# Go (Golang) Resources

Curated, high-trust sources for this workspace. Explainers in the lessons draw from
here — not from memory. Grouped **Knowledge** (learn the ideas), **Wisdom**
(communities), and **Repo** (our own code, the ground truth for this mission).

## Knowledge

### Start here (interactive, beginner-friendly)
- [A Tour of Go — go.dev/tour](https://go.dev/tour/)
  The official interactive intro, in four parts (basics → methods & interfaces →
  generics → concurrency). Runs in the browser. **Use for:** first exposure to any
  syntax or primitive; do the exercises.
- [Go by Example — gobyexample.com](https://gobyexample.com/)
  Annotated, runnable example programs for nearly every language feature. **Use for:**
  "show me the smallest working example of X" — slices, maps, channels, defer, errors.

### Idiomatic Go (the "why", interview gold)
- [Effective Go — go.dev/doc/effective_go](https://go.dev/doc/effective_go)
  The canonical guide to writing idiomatic Go. **Use for:** naming, zero values,
  interfaces, error handling, and the reasoning behind Go conventions.
- [Go Proverbs — go-proverbs.github.io](https://go-proverbs.github.io/)
  Rob Pike's pithy design principles ("Clear is better than clever", "Make the zero
  value useful"). **Use for:** the philosophy that ties the idioms together.
- [Uber Go Style Guide](https://github.com/uber-go/guide/blob/master/style.md)
  A widely-adopted, opinionated style guide. **Use for:** concrete Do/Don't rules on
  errors, concurrency, and structs — close to how our repo is written.

### The reference (authoritative, terse)
- [The Go Programming Language Specification — go.dev/ref/spec](https://go.dev/ref/spec)
  The exact language definition. **Use for:** precise semantics when a lesson makes a
  claim (what "comparable" means, how `range` evaluates, conversion rules).
- [The Go Memory Model — go.dev/ref/mem](https://go.dev/ref/mem)
  The happens-before rules governing concurrent access. **Use for:** the data-race and
  synchronization lessons — this is *the* interview-grade source.
- [The Go Blog — go.dev/blog](https://go.dev/blog/)
  Authoritative deep-dives (slices internals, error handling, generics, `context`).
  **Use for:** one level below the spec, written by the Go team.

### Concurrency (a pillar of this course)
- [Rob Pike — "Concurrency is not Parallelism" (go.dev/blog/waza-talk)](https://go.dev/blog/waza-talk)
  The framing every interview wants. **Use for:** the distinction, said crisply.
- [Rob Pike — Go Concurrency Patterns (slides)](https://go.dev/talks/2012/concurrency.slide)
  Channels as a composition tool: generators, fan-in/out, pipelines. **Use for:** the
  patterns behind our Kafka consumer loops.

### Books
- [_The Go Programming Language_ — Donovan & Kernighan (gopl.io)](https://www.gopl.io/)
  "GOPL" — the definitive textbook. **Use for:** the deepest treatment of the type
  system, methods, interfaces, and concurrency. Read the matching chapter after a lesson.
- [_100 Go Mistakes and How to Avoid Them_ — Teiva Harsanyi (Manning)](https://www.manning.com/books/100-go-mistakes-and-how-to-avoid-them)
  100 real mistakes + fixes, organised by topic. **Use for:** the gotchas interviews
  love (slice aliasing, nil maps, loop-variable capture, goroutine leaks). Author's
  companion site: [teivah.dev/book](https://teivah.dev/book/).

### Testing (a pillar of this course)
- [_Learn Go with Tests_ — quii (free)](https://quii.gitbook.io/learn-go-with-tests)
  A TDD-first path through the language; testing is built in from lesson one. **Use
  for:** learning Go *and* our table-driven/testify style at the same time.

## Wisdom (Communities)

- [r/golang](https://www.reddit.com/r/golang/)
  Large, active, reasonably high-signal. **Use for:** "is this idiomatic?", interview
  experiences, gotcha threads.
- [Gophers Slack](https://invite.slack.golangbridge.org/)
  The main real-time community; channels for newcomers, code review, and topics.
  **Use for:** quick "why does my code do X" answers from experienced gophers.
- [Go Forum — forum.golangbridge.org](https://forum.golangbridge.org/)
  Threaded, searchable, beginner-friendly. **Use for:** longer design/idiom questions.

## Repo (ground truth for this mission)
Our own Go patterns are the most relevant "resource" — captured in
[reference/repo-go-map.md](./reference/repo-go-map.md) (generated from a scan of
`internal/notification`, `internal/spike`, conversationmgmt, and `internal/golibs`).

## Gaps
- No single trusted "Go interview question bank" listed — quality varies wildly. The
  lessons build their own recall quizzes from the authoritative sources above.
- Performance/profiling (`pprof`, escape analysis) has fewer beginner-friendly sources;
  the Go blog + 100 Go Mistakes cover it — flag if a better primary source is needed.
