|
É possível utilizar canais para sincronizar execuções de goroutines. Aqui está um exemplo de utilização de um recebimento bloqueante para aguardar a goroutine finalizar. Ao aguardar por múltiplas goroutines terminarem, talvez seja melhor utilizar WaitGroup. |
|
![]()
package main |
|
import ( "fmt" "time" ) |
|
|
Esta função será executada em goroutine.
O canal |
func worker(done chan bool) { fmt.Print("working...") time.Sleep(time.Second) fmt.Println("done") |
|
Envio de valor para notificar que a execução finalizou |
done <- true
}
|
func main() { |
|
|
Inicializando a _ worker goroutine_, e passando o canal que será notificado. |
done := make(chan bool, 1)
go worker(done)
|
|
O código é bloqueado até a notificação ser recebida. |
<-done
}
|
$ go run channel-synchronization.go working...done |
|
|
Ao remover o recebimento |
Próximo exemplo: Channel Directions.