Я смотрю на параллельный доклад Роба Пайка для Go, и меня смущает этот пример Restoring Sequencing
(https://www.youtube.com/watch?v=f6kdp27TYZs&feature=youtu.be&t=617)
func boring(msg string) <-chan Message {
c := make(chan Message)
waitForIt := make(chan bool)
go func() {
for i := 0; ; i++ {
c <- Message{fmt.Sprintf("%s: %d", msg, i), waitForIt}
time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
<-waitForIt
}
}()
return c
}
Мой вопрос особенно это относится к <-waitForIt
. Я запутался, как этот фрагмент структуры используется, чтобы вызвать синхронность. Итак, мы строим канал с логическими значениями и выполняем goroutine. Какую роль здесь играет <-waitForIt
? Полная игровая площадка для этого примера: https://play.golang.org/p/R60AJWzr0t. Эта часть просто не для меня.
Что-то в том, что канал пуст, что там какой-то период принудительного ожидания?