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