Maison > développement back-end > Golang > Pourquoi sync.WaitGroup de Go peut-il fonctionner sans pointeur ?

Pourquoi sync.WaitGroup de Go peut-il fonctionner sans pointeur ?

Barbara Streisand
Libérer: 2024-12-06 22:27:15
original
806 Les gens l'ont consulté

Why Can Go's sync.WaitGroup Work Without a Pointer?

Pourquoi sync.WaitGroup fonctionne-t-il sans récepteur de pointeur ?

Dans Go, le type sync.WaitGroup est utilisé pour synchroniser les goroutines. Les méthodes de sync.WaitGroup, telles que Add, Done et Wait, sont définies avec des récepteurs de pointeurs. Cependant, il est courant de déclarer les valeurs sync.WaitGroup sans pointeur (*).

Considérez l'extrait suivant :

package main

import (
    "fmt"
    "sync"
    "time"
)

var wg sync.WaitGroup

func main() {
    wg.Add(1)

    go func() {
        fmt.Println("starting...")
        time.Sleep(1 * time.Second)
        fmt.Println("done....")
        wg.Done()
    }()

    wg.Wait()
}
Copier après la connexion

Dans ce code, nous déclarons wg en tant que sync.WaitGroup valeur sans pointeur (*). Ceci est possible car Go permet l'utilisation de récepteurs de pointeurs sur des valeurs non-pointeurs.

Sous le capot, Go convertit une valeur non-pointeur (comme dans wg.Add(1)) en une valeur de pointeur (comme &wg.Add(1)). Cela permet aux méthodes de sync.WaitGroup d'être appelées sur des valeurs non-pointeurs.

Réflexion sur l'ensemble de méthodes de sync.WaitGroup

L'ensemble de méthodes de sync. WaitGroup est vide car toutes ses méthodes ont des récepteurs de pointeurs. Ceci est confirmé par le code de réflexion suivant :

wg := sync.WaitGroup{}
fmt.Println(reflect.TypeOf(wg).NumMethod()) // Outputs 0
Copier après la connexion

Cela signifie que sync.WaitGroup n'a aucune méthode pouvant être appelée directement sur des valeurs non-pointeurs.

Conclusion

Il est courant dans Go de déclarer les valeurs sync.WaitGroup sans pointeur (*). Ceci est possible car Go permet l'utilisation de récepteurs de pointeurs sur des valeurs non-pointeurs. L'ensemble de méthodes de sync.WaitGroup est vide car toutes ses méthodes ont des récepteurs de pointeurs, qui sont automatiquement convertis à partir de valeurs non-pointeurs par le compilateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal