Junior — Middle
Ar leidžiama vienu kanalu siųsti keliomis gorutinomis vienu metu?
sobes.tech AI
Atsakymas iš AI
Taip, Go leidžiama vienu metu siųsti žinutes į kanalą iš kelių gorutinių. Kanalai Go yra saugūs kelių gijų aplinkoje ir užtikrina sinchronizaciją tarp gorutinių.
Tačiau svarbu prisiminti:
- Jei keli gorutinai rašo į tą patį kanalą ir niekas jo neskaito, tai sukels blokavimą.
- Jei kanalas yra buferiuotas, įrašai blokuosis tik tada, kai buferis bus pilnas.
- Reikia atsargiai valdyti kanalo uždarymą: tik siuntėjas turėtų jį uždaryti, ir tik tada, kai yra tikras, kad daugiau įrašų nebus.
Pavyzdys:
ch := make(chan int)
// Keli gorutinų paleidimas, siunčiant duomenis į kanalą
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Skaitymas iš kanalo
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
Taip, vienu metu siųsti į kanalą iš kelių gorutinių yra standartinė praktika Go kalboje.