Все читатели получают нулевые значения на закрытом канале.
В этом примере функция Publish возвращает канал, который используется для передачи сигнала, когда сообщение было опубликовано.
// Печатает текст по истечении заданного времени.
// По завершении канал wait закрывается.
func Publish(text string, delay time.Duration) (wait <-chan struct{}) {
ch := make(chan struct{})
go func() {
time.Sleep(delay)
fmt.Println("НОВОСТИ:", text)
close(ch) // Транслируем для всех получателей.
}()
return ch
}
Обратите внимание, что мы используем канал пустых структур: struct{}. Это ясно указывает на то, что канал будет использоваться только для сигнализации, а не для передачи данных.
Вот как вы можете использовать эту функцию.
func main() {
wait := Publish("Каналы позволяют goroutines общаться.", 5*time.Second)
fmt.Println("Ожидание новостей...")
<-wait
fmt.Println("Время выходить.")
}
Вывод:
Ожидание новостей...
НОВОСТИ: Каналы позволяют goroutines общаться.
Время выходить.
Читайте также:
- Каналы в Golang предлагают синхронизированное общение
- Эффективный Go: параллелизм, go-процедуры (goroutines)
- Эффективный Go: каналы
Комментариев нет:
Отправить комментарий