Sobes.tech
Junior — Middle

Je povolené odosielať správy do jedného kanála viacerými gorutinami súčasne?

sobes.tech AI

Odpoveď od AI

Áno, v Go je povolené súčasné odosielanie správ do jedného kanála z viacerých gorútín. Kanály v Go sú bezpečné pre vlákna a zabezpečujú synchronizáciu medzi gorútinami.

Je však dôležité si zapamätať:

  • Ak niekoľko gorútín zapisuje do jedného kanála a nikto ho nečíta, dôjde k zablokovaniu.
  • Ak je kanál bufferovaný, zápisy sa budú blokovať iba v prípade, že je buffer plný.
  • Je potrebné opatrne spravovať zatváranie kanála: iba odosielateľ by ho mal zatvoriť, a to iba v prípade, že je istý, že už nebude žiadny zápis.

Príklad:

ch := make(chan int)

// Spustenie viacerých gorútín, ktoré posielajú dáta do kanála
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Čítanie z kanála
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

Týmto spôsobom je súčasné odosielanie do kanála z viacerých gorútín štandardnou praxou v Go.