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.