A worker pool fans results back on a results channel. What is the safe way to close results so the consumer's `for r := range results` terminates without a panic?
var wg sync.WaitGroup
// N workers, each: defer wg.Done(); results <- compute(job)
go func() {
wg.Wait()
close(results)
}()
for r := range results { use(r) }