Nós podemos usar canais para sincronizar a execução
através das goroutines. Aqui temos um exemplo do uso de
um bloqueador de recebimento para esperar pela finalização
de uma goroutine.
|
|
|
|
|
import "fmt"
import "time"
|
Essa é a função que iremos executar em uma goroutine. O
canal feito será usado para notificar outra
goroutine que essa função trabalhador é feita.
|
func trabalhador(feito chan bool) {
fmt.Print("trabalhando...")
time.Sleep(time.Second)
fmt.Println("feito")
|
Envia um valor para notificar o que estamos fazendo.
|
|
|
|
Inicia a goroutine trabalhador, dando-lhe um canal
para notificar.
|
feito := make(chan bool, 1)
go trabalhador(feito)
|
Bloqueia até que recebamos uma notificação de um
trabalhador no canal.
|
|