Junior — Middle
Hoe wordt gegevensoverdracht via een niet-buffered kanaal uitgevoerd?
sobes.tech AI
Antwoord van AI
In Go zorgt een niet-bufferde kanaal (onbufferde kanaal) voor een synchronisatie van gegevensoverdracht tussen goroutines. Dit betekent dat het verzenden van een waarde naar het kanaal wordt geblokkeerd totdat een andere goroutine deze waarde uit het kanaal ontvangt, en vice versa: de ontvangst wordt geblokkeerd totdat er een waarde is om te lezen.
Op deze manier vindt de gegevensoverdracht via een niet-bufferde kanaal plaats met synchronisatie tussen zender en ontvanger, wat een uitwisseling van gegevens zonder tussenopslag garandeert.
Voorbeeld:
ch := make(chan int) // niet-bufferde kanaal
go func() {
ch <- 42 // verzending wordt geblokkeerd totdat iemand leest
}()
value := <-ch // ontvangst blokkeert de uitvoering totdat een waarde verschijnt
fmt.Println(value) // zal 42 afdrukken
In dit voorbeeld stuurt de goroutine een getal naar het kanaal en wordt geblokkeerd totdat de hoofd-goroutine dat getal leest.