Sobes.tech
Junior — Middle

Explique la finalité et le principe de fonctionnement de la structure sync.Once en Go.

sobes.tech IA

Réponse de l'IA

sync.Once en Go est utilisé pour garantir qu'une opération spécifique (par exemple, l'initialisation) ne sera effectuée qu'une seule fois, même si plusieurs goroutines l'appellent simultanément. Cela est utile pour une initialisation paresseuse ou la configuration de ressources.

Principe de fonctionnement:

  • sync.Once contient un drapeau interne qui suit si la fonction a déjà été exécutée.
  • La méthode Do(f func()) accepte une fonction f et garantit qu'elle ne sera appelée qu'une seule fois.
  • Si plusieurs goroutines appellent Do en même temps, seule l'une d'entre elles exécutera la fonction, les autres attendront qu'elle se termine.

Exemple:

var once sync.Once

func initialize() {
    fmt.Println("Initialisation terminée")
}

func main() {
    for i := 0; i < 5; i++ {
        go func() {
            once.Do(initialize)
        }()
    }
    time.Sleep(time.Second) // Attendre la fin des goroutines
}

Dans cet exemple, le message "Initialisation terminée" sera affiché exactement une fois.