Sobes.tech
Junior — Middle

Kaip užtikrinti saugų duomenų įrašymą į kanalą iš kelių goroutine'ų be užrakinimo?

sobes.tech AI

Atsakymas iš AI

Go kalboje, saugiai rašyti duomenis į kanalą iš kelių gorutinų be užraktų paprastai pakanka naudoti patį kanalą, nes kanalai Go yra numatytai saugūs kelių gijų aplinkoje.

Pavyzdys:

ch := make(chan int)

// Rašymas į kanalą iš kelių gorutinų
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // saugus rašymas
    }(i)
}

// Skaitymas iš kanalo
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Jei norite užtikrinti, kad rašymas nebus blokuojamas, galite naudoti buferuotą kanalą. Tokiu būdu, rankiniai užraktai nėra reikalingi, nes kanalas užtikrina sinchronizaciją.