Golang WaitGroup vs channel: which one should you use to wait for goroutines? This video gives you the interview answer — a one-sentence decision rule you can say out loud, and everything you need to defend it.
Both tools are taught from scratch, so you don't need to have watched anything else: sync.WaitGroup's three moves (Add, Done, Wait) with the counter drawn ticking down to zero, and the channel version where the receive itself is the wait. Every program shown was actually run, and every drawn terminal matches the real output, deadlock traces included.
You'll also get the two classic WaitGroup bugs interviewers love as follow-up questions (Add inside the goroutine, and a missing Done), the new wg.Go shortcut from Go 1.25, what each tool cannot do (a WaitGroup carries no data; counting channel receives assumes every worker sends), a pause-and-predict deadlock where both tools are wired backwards, and the right way to combine them: results on the channel, a WaitGroup that tells a helper goroutine when to close it, and range doing the receiving.
The rule, so you have it: need only completion, use a WaitGroup. Need the values, use a channel. Need both, use both.
More Go concurrency on this channel: goroutines and the Go scheduler, and Go channels (the handoff, buffered vs unbuffered, and deadlocks).