Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpChCl 160 of 280 menu
◀ ▶

Закрытие канала в Go

Закрытие помечает канал как завершенный: новые отправки в него запрещены, а прием из пустого закрытого канала сразу отдает нулевое значение типа и признак, что данных больше нет.

Отправитель кладет числа, затем завершает канал; получатель читает с двумя результатами:

package main import "fmt" func main() { ch := make(chan int) go func() { ch <- 1 ch <- 2 close(ch) }() for i := 0; i < 3; i++ { v, ok := <-ch fmt.Println(v, ok) } }

Первые две строки печатают 1 и 2 с true. Третья дает 0 и false: канал пуст и закрыт.

Повторная отправка в уже закрытый канал останавливает программу. Закрывать нужно только отправитель, который больше не будет писать:

package main import "fmt" func main() { ch := make(chan int, 1) ch <- 5 close(ch) v, ok := <-ch fmt.Println(v, ok) }

Дан следующий код:

ch := make(chan int) close(ch) v, ok := <-ch

Скажите, какие будут v и ok после приема.

Дан следующий код:

ch := make(chan int) close(ch) ch <- 1

Скажите, что произойдет с программой на последней строке.

Скажите, зачем при чтении из канала иногда берут второй результат вместе со значением.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить