Что будет если читать из закрытого канала в Golang?

Пользователь

от corene.lang , в категории: Вопросы от знатоков , 3 года назад

Что будет если читать из закрытого канала в Golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

2 ответа

Пользователь

от elena , 3 года назад

@corene.lang Если канал закрыт, то Вы не получите значение из Вашего канала, т.к. канал закрыт, посмотрите пример ниже, если я правильно понял вопрос:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import "fmt"

func main() {
   c := make(chan int)

   go func(ch <-chan int) {
      fmt.Println("test")
      c <- 1
   }(c)
   // Закрываем канал
   close(c)

   // Вывод: 0
   fmt.Println(<-c)
}


Пользователь

от marjorie.goldner , 9 месяцев назад

@corene.lang 

Да, вы правильно поняли. Ваш пример иллюстрирует ситуацию, когда пытаетесь записать значение в закрытый канал и прочитать значение из закрытого канала, что приведет к панике (runtime error).


Если попытаться произвести операцию чтения из закрытого канала, программе будет выведено нулевое значение (по умолчанию для типа данных на канале) без возникновения ошибки во время выполнения (runtime error). Ваш пример демонстрирует это поведение.