|
Kanály můžeme použít pro synchronizaci provádění mezi gorutinami. Zde je příklad který s použitím blokujícího příjmu čeká až gorutina skončí. Až budete čekat na ukončení několika gorutin, možná budete preferovat použití WaitGroup. |
|
package main
|
|
import "fmt"
import "time"
|
|
|
Tohle je funkce která bude čekat na gorutinu. Kanál
|
func worker(done chan bool) {
fmt.Print("pracuji...")
time.Sleep(time.Second)
fmt.Println("hotovo")
|
|
Pošle hodnotu abysme oznámili že jsme hotovi. |
done <- true
}
|
func main() {
|
|
|
Nastartuje pracovní gorutinu a předá ji kanál pro oznámení. |
done := make(chan bool, 1)
go worker(done)
|
|
Bude blokovat provádění dokud nedostaneme do kanálu oznámení od pracovní rutiny. |
<-done
}
|
$ go run channel-synchronization.go
pracuji...hotovo
|
|
|
Když byste odstranili řádek |
Další příklad: Kanály se směrem.