Senior
Kuris iš šių kodų fragmentų turi klaidą arba potencialią problemą, susijusią su kanalų darbu? 1 variantas package main func main() { ch := make(chan int) ch <- 1 } 2 variantas package main func main() { ch := make(chan int, 1) ch <- 1 } 3 variantas package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } 4 variantas package main func main() { ch := make(chan int) close(ch) <-ch } 5 variantas package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech AI
Atsakymas iš AI
Klaida yra 1-ame variante:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Čia sukuriamas nebuferinis kanalas ch := make(chan int). Siuntimas į šį kanalą ch <- 1 užstringa, kol kas nors neskaito iš kanalo. Šiame kode nėra gavėjo, todėl programa amžinai užstringa (deadlock).
2-asis variantas yra teisingas, nes kanalas su buferiu, kurio dydis 1, ir siuntimas neblokuojasi, jei buferis nėra pilnas.
3-iasis variantas taip pat teisingas: siuntimas ir gavimas yra subalansuoti.
4-asis variantas teisingas: galima skaityti iš uždaryto kanalo, skaitymas grąžins nulines reikšmes ir neblokuos.
5-asis variantas teisingas: buferis 3, siunčiama viena reikšmė, buferis nėra pilnas.
Apibendrinant, problema yra tik 1-ame variante — užstringa siunčiant į nebuferinį kanalą be gavėjo.