Sobes.tech
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ł