Sobes.tech
Junior — Middle

Czy używałeś funkcji Once w języku Go i jak ją wykorzystywałeś w swoich projektach?

sobes.tech AI

Odpowiedź od AI

W języku Go funkcja sync.Once służy do zapewnienia, że określony fragment kodu zostanie wykonany dokładnie raz, nawet jeśli wywołanie pochodzi z wielu gorutyn jednocześnie. Jest to przydatne na przykład do inicjalizacji zasobów, które mają być tworzone tylko raz.

Przykład użycia:

var once sync.Once

func initialize() {
    fmt.Println("Inicjalizacja zakończona")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize) // initialize zostanie wywołane tylko raz
        }()
    }
    time.Sleep(time.Second) // Czekamy na zakończenie gorutyn
}

W moich projektach używałem sync.Once do leniwej inicjalizacji konfiguracji lub połączenia z bazą danych, aby uniknąć powtarzających się inicjalizacji i warunków wyścigu.