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.