Sobes.tech
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.