package main import ( "fmt" "sync" ) func main() { channel := make(chan int, 10) var wg sync.WaitGroup wg.Add(1) go func(wg *sync.WaitGroup, channel chan<- int) { defer wg.Done() for i := 0; i < 100; i++ { channel <- i } close(channel) }(&wg, channel) wg.Add(1) go func(wg *sync.WaitGroup, channel <-chan int) { defer wg.Done() for num := range channel { fmt.Println(num) } }(&wg, channel) wg.Wait() }