// We can use channels to synchronize execution // across goroutines. Here's an example of using a // blocking receive to wait for a goroutine to finish. // When waiting for multiple goroutines to finish, // you may prefer to use a [WaitGroup](waitgroups). package main import ( "fmt" "time" ) // This is the function we'll run in a goroutine. 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 that we're 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 we receive a notification from the // worker on the channel. <-done }