РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
828 of 1593 menu

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

Закрытие канала в Go выполняется с помощью встроенной функции close. Она сигнализирует получателям, что в канал больше не будут отправляться новые данные. Закрытие канала полезно для корректного завершения горутин и предотвращения deadlock'ов. Функция close принимает один параметр - канал, который нужно закрыть. Важно: закрывать можно только каналы, отправлять данные в закрытый канал нельзя - это вызовет панику.

Синтаксис

close(ch)

Пример

Давайте создадим канал, отправим в него одно значение, закроем канал и прочитаем данные:

package main import "fmt" func main() { ch := make(chan int) go func() { ch <- 42 close(ch) }() res := <-ch fmt.Println(res) }

Результат выполнения кода:

42

Пример

Давайте проверим, как работает чтение из закрытого канала с помощью второго возвращаемого значения, которое показывает, было ли значение получено из канала до его закрытия:

package main import "fmt" func main() { ch := make(chan int, 2) ch <- 1 ch <- 2 close(ch) for i := 0; i < 3; i++ { res, ok := <-ch fmt.Printf("%d, %t\n", res, ok) } }

Результат выполнения кода:

"1, true" "2, true" "0, false"

Пример

Использование закрытия канала для корректного завершения горутины при переборе значений с помощью range:

package main import "fmt" func main() { ch := make(chan int) go func() { for i := 1; i <= 5; i++ { ch <- i } close(ch) }() for res := range ch { fmt.Println(res) } }

Результат выполнения кода:

"1" "2" "3" "4" "5"

Смотрите также

  • функцию chan,
    которая создает канал для передачи данных между горутинами
  • функцию buffered-chan,
    которая создает буферизированный канал
  • функцию unbuffered-chan,
    которая создает небуферизированный канал
  • функцию send,
    которая описывает отправку данных в канал
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить