Sobes.tech
Junior — Middle

Ar galite paaiškinti 'Once' koncepciją Go kalboje ir kokiais atvejais ji taikoma?

sobes.tech AI

Atsakymas iš AI

Go kalboje sync.Once yra struktūra, kuri garantuoja, kad tam tikra funkcija bus vykdoma tik vieną kartą, net jei kvietimas vykdomas vienu metu iš kelių gorutinių. Tai naudinga resursų inicializacijai, kurie turi būti sukurti tik vieną kartą, pavyzdžiui, prisijungimo prie duomenų bazės nustatymui arba konfigūracijos įkėlimui.

Naudojimo pavyzdys:

var once sync.Once

func initialize() {
    fmt.Println("Inicializacija baigta")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Laukiame gorutinių pabaigos
}

Šiame pavyzdyje funkcija initialize bus iškviesta tik vieną kartą, nepriklausomai nuo gorutinių skaičiaus.