33 lines
860 B
Go
33 lines
860 B
Go
// ## Synchronization
|
|
|
|
// We can use channels to synchronize execution
|
|
// accross goroutines. Here's an example of waiting
|
|
// for another goroutine to finish.
|
|
|
|
package main
|
|
|
|
import "fmt"
|
|
import "time"
|
|
|
|
// The `done` channel will be used for
|
|
// synchronization.
|
|
func worker(done chan<- bool) {
|
|
fmt.Print("Working...")
|
|
time.Sleep(time.Second)
|
|
fmt.Println(" done")
|
|
|
|
// Send a value to notify that the work is done.
|
|
done <- true
|
|
}
|
|
|
|
func main() {
|
|
// Start a worker goroutine, give it the channel to
|
|
// notify on.
|
|
done := make(chan bool, 1)
|
|
go worker(done)
|
|
|
|
// Block until we can receive a value from the worker
|
|
// over the channel.
|
|
<- done
|
|
}
|