Middle+
W jakich warunkach odczyt z kanału zostanie na zawsze zablokowany? Co się stanie podczas zapisywania do kanału nil? Podczas zapisywania do zamkniętego kanału?
sobes.tech AI
Odpowiedź od AI
-
Odczyt z kanału zostanie na zawsze zablokowany, jeśli kanał jest pusty i nikt nie zamierza w niego pisać (np. wszyscy nadawcy są zamknięci lub nieobecni).
-
Zapis do kanału nil (kanał równy nil) jest zawsze na zawsze zablokowany, ponieważ kanał nil nie jest zainicjowany i nie może przyjmować danych.
-
Zapis do zamkniętego kanału powoduje panikę (panic) w Go, ponieważ jest to zabronione i uznawane za błąd czasu wykonania.
Przykład:
var ch chan int // kanał nil
// <-ch // odczyt z kanału nil jest na zawsze zablokowany
// ch <- 1 // zapis do kanału nil jest na zawsze zablokowany
ch = make(chan int)
close(ch)
// ch <- 2 // panic: wysłanie na zamknięty kanał