Junior — Middle
Kas on lubatud saata sõnumeid ühele kanalile samaaegselt mitme goroutine'iga?
sobes.tech AI
Vastus AI-lt
Jah, Go-s on lubatud samaaegselt mitmest gorutiinist saata sõnumeid ühte kanalisse. Kanalid Go-s on niiditurvalised ja tagavad sünkroniseerimise gorutiinide vahel.
Kuid on oluline meeles pidada:
- Kui mitu gorutaini kirjutavad ühte kanalisse ja keegi seda ei loe, põhjustab see blokeeringu.
- Kui kanal on pufferdatud, blokeerivad kirjutamised ainult siis, kui puffer on täis.
- Kanalit tuleb hoolikalt sulgeda: seda peaks tegema ainult saatja ja ainult siis, kui on kindel, et rohkem kirjeid ei tule.
Näide:
ch := make(chan int)
// Mitme gorutini käivitamine, mis saadavad andmeid kanalile
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Kanali lugemine
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
Seega on samaaegne saatmine kanalile mitmest gorutiinist Go-s standardpraktika.