Senior
Který z následujících fragmentů kódu obsahuje chybu nebo potenciální problém související s prací s kanály? Možnost 1 package main func main() { ch := make(chan int) ch <- 1 } Možnost 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Možnost 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Možnost 4 package main func main() { ch := make(chan int) close(ch) <-ch } Možnost 5 package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech AI
Odpověď od AI
Chyba je v možnosti 1:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Zde je vytvořen nebufferovaný kanál ch := make(chan int). Odeslání do tohoto kanálu ch <- 1 se zablokuje, dokud někdo ne přečte z kanálu. V tomto kódu není žádný příjemce, takže program se navždy zasekne (deadlock).
Možnost 2 je správná, protože kanál je s bufferem velikosti 1, a odeslání se nezablokuje, pokud není buffer plný.
Možnost 3 je také správná: odeslání a příjem jsou vyvážené.
Možnost 4 je správná: lze číst z uzavřeného kanálu, čtení vrátí nulovou hodnotu a nezablokuje se.
Možnost 5 je správná: buffer 3, odesílá se jedna hodnota, buffer není plný.
Stručně řečeno, problém je pouze v možnosti 1 — blokování při odesílání do nebufferovaného kanálu bez příjemce.