Sobes.tech
Junior — Middle

Jak zajistit bezpečné zápisy dat do kanálu z více gorutin bez použití zámku?

sobes.tech AI

Odpověď od AI

V jazyce Go je obvyklé bezpečně zapisovat data do kanálu z více gorutin bez použití zámků, protože kanály v Go jsou ve výchozím nastavení bezpečné pro vlákna.

Příklad:

ch := make(chan int)

// Zápis do kanálu z více gorutin
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // bezpečný zápis
    }(i)
}

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

Pokud chcete zajistit, že zápis nebude blokován, můžete použít bufferovaný kanál. Tím se ruční zámky nestávají nutnými, protože kanál zajišťuje synchronizaci.