Maison >développement back-end >Golang >Pourquoi puis-je appeler les méthodes sync.WaitGroup sur des valeurs, pas seulement sur des pointeurs ?
Pourquoi les méthodes sync.WaitGroup peuvent-elles être appelées sur des valeurs plutôt que sur des pointeurs ?
Malgré la documentation sync.WaitGroup indiquant que ses méthodes nécessitent un *récepteur sync.WaitGroup, il est possible d'appeler ces méthodes sur des valeurs de type sync.WaitGroup. En effet, toutes les méthodes sync.WaitGroup ont des récepteurs de pointeurs, ce qui signifie que le compilateur convertira automatiquement la valeur en pointeur lorsque la méthode est appelée.
L'ensemble de méthodes vide de sync.WaitGroup
L'ensemble de méthodes réel d'un sync.WaitGroup est vide. Pour le confirmer, vous pouvez utiliser la réflexion :
wg := sync.WaitGroup{} fmt.Println(reflect.TypeOf(wg).NumMethod()) // Output: 0
Par conséquent, les méthodes qui semblent être définies sur les valeurs de sync.WaitGroup font en fait partie de l'ensemble de méthodes de *sync.WaitGroup.
Notation abrégée pour appeler des méthodes de pointeur sur des valeurs
Lorsque vous appelez une méthode de pointeur sur une valeur, le le compilateur le traduit en un appel au pointeur vers cette valeur. Par exemple :
var wg sync.WaitGroup wg.Add(1)
Est équivalent à :
(&wg).Add(1)
La spécification pour Go indique que si une variable est adressable et que son ensemble de méthodes contient une méthode, appeler cette méthode directement sur le variable est un raccourci pour l'appeler sur le pointeur vers cette variable.
Connexe Question
Pour plus d'informations sur ce sujet, reportez-vous à la question connexe :
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!