Использовать канал закрытия для координации нескольких процедур, ожидающих события.
Вот пример. Функция printer
представляет процедуры, ожидающие результата. Первый аргумент - это канал, который будет закрыт после установки результата. Второй аргумент - указатель на результат.
func printer(ready chan struct{}, result *string) {
<-ready
fmt.Println(*result)
}
Используйте его так:
ready := make(chan struct{})
var result string
// Start the goroutines.
go printer(ready, &result)
go printer(ready, &result)
// Set the result and close the channel to signal that the value is ready.
result = "Hello World!"
close(ready)
Это работает, потому что при получении на закрытом канале возвращается нулевое значение типа канала.
Запустите его на детской площадке