// synchronize execution across goroutines package main import ( "fmt" "time" ) // the done channel will be used to notify another goroutine that this function’s work is done func worker(done chan bool) { fmt.Print("working...") time.Sleep(time.Second) fmt.Println("done") // Send a value to notify "done" done <- true } func main() { // start a worker goroutine, giving it the channel to notify on done := make(chan bool, 1) go worker(done) // block until receive notification from the worker on the channel <-done }