Middle+
Kokios sąlygos užtikrins, kad kanalo skaitymas bus amžinai užblokuotas? Kas nutiks, jei įrašysite į nil-kanalą? Jei įrašysite į uždarytą kanalą?
sobes.tech AI
Atsakymas iš AI
-
Kanalas iš kurio skaitoma, bus užblokuotas amžinai, jei jis yra tuščias ir niekas nesiruošia į jį rašyti (pavyzdžiui, visi siuntėjai yra uždaryti arba jų nėra).
-
Rašymas į nil-kanalą (kanalas, lygus nil) visada užblokuojamas amžinai, nes nil-kanalas nėra inicializuotas ir negali priimti duomenų.
-
Rašymas į uždarytą kanalą sukelia paniką (panic) Go kalboje, nes tai yra uždrausta ir laikoma vykdymo klaida.
Pavyzdys:
var ch chan int // nil-kanalas
// <-ch // skaitymas iš nil-kanalo bus užblokuotas amžinai
// ch <- 1 // rašymas į nil-kanalą bus užblokuotas amžinai
ch = make(chan int)
close(ch)
// ch <- 2 // panic: siuntimas uždarytam kanalui