Junior — Middle
Kas on võimalik samaaegselt saada väärtusi ühest kanalist mitmes goroutines?
sobes.tech AI
Vastus AI-lt
Jah, mitu goroutine saab samaaegselt saada väärtusi ühest kanalist Go keeles. Kanalid Go-s toetavad mitmekordset lugemist ja kirjutamist, võimaldades mitmel goroutine'il lugeda sama kanalist paralleelselt.
Kuid oluline on märkida, et kui mitu goroutine'i loevad ühest kanalist, saab iga väärtuse ainult üks neist — väärtusi ei dubleerita. See on kasulik töö jaotamiseks goroutine'ide vahel (tööjõu bassein).
Näide:
ch := make(chan int)
// Käivitame mitu goroutine'i, mis loevad kanalist
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d sai %d\n", id, val)
}
}(i)
}
// Saadame andmeid kanalile
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
Selles näites jaotuvad kanalist saadud väärtused kolme goroutine'i vahel.