package main import "fmt" func producer(p chan int, items int) { defer close(p) for i := 1; i <= items; i++ { fmt.Println("Produer Producing ", i) p <- i } } func consumer(p chan int, done chan bool) { defer close(done) for val := range p { fmt.Println("Consumer Consuming Item: ", val) } } func main() { i := 100 p := make(chan int) done := make(chan bool) go producer(p, i) go consumer(p, done) <-done fmt.Println("Everything is done") }