Sobes.tech
Junior — Middle

Vai ir iespējams vienlaikus saņemt vērtības no viena kanāla vairākās goroutine'ās?

sobes.tech AI

Atbilde no AI

Jā, vairākas gorutīnas var vienlaikus saņemt vērtības no viena kanāla Go valodā. Kanāli Go valodā atbalsta vairākas lasīšanas un rakstīšanas operācijas, ļaujot vairākām gorutīnām vienlaikus lasīt no tā paša kanāla.

Tomēr ir svarīgi ņemt vērā, ka, ja vairākas gorutīnas lasa no viena kanāla, katra vērtība tiks saņemta tikai vienas no tām — vērtības netiek dublētas. Tas ir noderīgi darba sadalīšanai starp gorutīnām (darba baseins).

Piemērs:

ch := make(chan int)

// Sākam vairākas gorutīnas, kas lasa no kanāla
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d saņēma %d\n", id, val)
        }
    }(i)
}

// Sūta datus uz kanāla
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

Šajā piemērā, vērtības no kanāla tiek sadalītas starp trim gorutīnām.