Sobes.tech
Junior — Middle

Je povoleno odesílat zprávy do jednoho kanálu více gorutinami současně?

sobes.tech AI

Odpověď od AI

Ano, v Go je povoleno současně odesílat zprávy do jednoho kanálu z více gorutin. Kanály v Go jsou bezpečné pro vlákna a zajišťují synchronizaci mezi gorutinami.

Je však důležité pamatovat:

  • Pokud několik gorutin zapisuje do jednoho kanálu a nikdo ho nečte, dojde k zablokování.
  • Pokud je kanál bufferovaný, zápisy se zablokují pouze při naplnění bufferu.
  • Je třeba opatrně spravovat uzavření kanálu: pouze odesílatel by ho měl uzavřít, a to pouze tehdy, když je jistý, že již nebude žádný zápis.

Příklad:

ch := make(chan int)

// Spuštění několika gorutin, které posílají data do kanálu
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

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

Tímto způsobem je současné odesílání do kanálu z více gorutin standardní praxí v Go.