Sobes.tech
Junior — Middle

Engedélyezett több goroutine-nak egyszerre üzenetet küldeni egy csatornára?

sobes.tech MI

Válasz az MI-től

Igen, a Go-ban megengedett, hogy több goroutine egyidejűleg üzeneteket küldjön egy csatornára. A csatornák a Go-ban szálbiztosak, és szinkronizálást biztosítanak a goroutine-ok között.

Fontos azonban megjegyezni:

  • Ha több goroutine ír ugyanabba a csatornába, és senki sem olvassa, az blokkolást eredményez.
  • Ha a csatorna pufferelt, az írások csak akkor blokkolódnak, amikor a puffer megtelik.
  • Óvatosan kell kezelni a csatorna bezárását: csak a küldő zárhatja be, és csak akkor, amikor biztos benne, hogy több írás nem lesz.

Példa:

ch := make(chan int)

// Több goroutine indítása, amelyek adatokat küldenek a csatornára
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Olvasás a csatornából
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

Így a több goroutine által történő egyidejű küldés a csatornára a Go-ban szabványos gyakorlat.