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.Oncecontient un drapeau interne qui suit si la fonction a déjà été exécutée.- La méthode
Do(f func())accepte une fonctionfet garantit qu'elle ne sera appelée qu'une seule fois. - Si plusieurs goroutines appellent
Doen 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.