Junior — Middle
Hoe kun je in Go omgaan met of interactie hebben met een gesloten kanaal?
sobes.tech AI
Antwoord van AI
In Go is een gesloten kanaal (unbuffered kanaal) een kanaal zonder buffer dat de zender en ontvanger synchroniseert. Je kunt op de volgende manieren omgaan met of interactie hebben met zo'n kanaal:
- Verzenden en ontvangen: De verzender wordt geblokkeerd totdat de ontvanger de waarde leest, en vice versa.
- Kanaal sluiten: Een kanaal kan worden gesloten met de functie
close(channel). Na het sluiten kunnen geen waarden meer worden verzonden, maar kunnen de resterende waarden worden gelezen en null-waarden worden verkregen. - Controle op sluiting: Bij het lezen uit een kanaal kan worden gecontroleerd of het gesloten is, door de tweede waarde te gebruiken:
v, ok := <-ch
if !ok {
// kanaal gesloten
}
- Gebruik van select: Voor niet-blokkerende interacties of timeouts kan de constructie
selectworden gebruikt met kanalen.
Voorbeeld:
ch := make(chan int) // gesloten kanaal
// Verzenden
go func() {
ch <- 42
}()
// Ontvangen
val := <-ch
// Sluiten
close(ch)
// Controle
v, ok := <-ch
if !ok {
fmt.Println("Kanaal gesloten")
}