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.
|
|
|
|
|
import "fmt"
import "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.
|
|
|
|
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.
|
|