Sobes.tech
Senior

Welke van de volgende codefragmenten bevat een fout of potentieel probleem gerelateerd aan het werken met kanalen? Optie 1 package main func main() { ch := make(chan int) ch <- 1 } Optie 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Optie 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Optie 4 package main func main() { ch := make(chan int) close(ch) <-ch } Optie 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech AI

Antwoord van AI

Fout bevindt zich in Optie 1:

package main
func main() {
    ch := make(chan int)
    ch <- 1
}

Hier wordt een niet-buffered kanaal ch := make(chan int) aangemaakt. Het verzenden naar dit kanaal ch <- 1 blokkeert totdat iemand uit het kanaal leest. In deze code is er geen ontvanger, dus het programma zal voor altijd vastlopen (deadlock).

Optie 2 is correct, omdat het kanaal gebufferd is met grootte 1, en verzenden niet blokkeert als de buffer niet vol is.

Optie 3 is ook correct: verzenden en ontvangen zijn gebalanceerd.

Optie 4 is correct: je kunt lezen uit een gesloten kanaal, de lezing geeft de nulwaarde terug en blokkeert niet.

Optie 5 is correct: buffer van 3, één waarde wordt verzonden, de buffer is niet vol.

Kortom, het probleem ligt alleen in Optie 1 — blokkering bij verzenden naar een niet-buffered kanaal zonder ontvanger.