Welcher der folgenden Codeausschnitte enthält einen Fehler oder ein potenzielles Problem im Zusammenhang mit der Arbeit mit Kanälen? Option 1 package main func main() { ch := make(chan int) ch <- 1 } Option 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Option 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Option 4 package main func main() { ch := make(chan int) close(ch) <-ch } Option 5 package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech KI
Antwort von AI
Der Fehler liegt in Variante 1:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Hier wird ein unpufferter Kanal ch := make(chan int) erstellt. Das Senden in diesen Kanal ch <- 1 blockiert, bis jemand aus dem Kanal liest. In diesem Code gibt es keinen Empfänger, daher wird das Programm für immer hängen bleiben (Deadlock).
Variante 2 ist korrekt, da der Kanal gepuffert ist mit der Größe 1, und das Senden nicht blockiert, wenn der Puffer nicht voll ist.
Variante 3 ist ebenfalls korrekt: Senden und Empfangen sind ausgeglichen.
Variante 4 ist korrekt: Man kann aus einem geschlossenen Kanal lesen, das Lesen gibt den Nullwert zurück und blockiert nicht.
Variante 5 ist korrekt: Puffergröße 3, ein Wert wird gesendet, der Puffer ist nicht voll.
Kurz gesagt, das Problem liegt nur in Variante 1 — Blockierung beim Senden in einen unpufferierten Kanal ohne Empfänger.