Maison >développement back-end >Golang >Go Pointeurs : quelle est la différence entre `&` (Adresse de) et `*` (Déréférence) ?
Dans Go, passer des variables comme arguments de fonction peut parfois déclencher des erreurs du compilateur, qui peuvent être résolues à l'aide de pointeurs. Cependant, les distinctions entre les pointeurs & et * prêtent souvent à confusion. Cet article vise à clarifier les différences et les scénarios d'utilisation pour les deux types de pointeurs.
Dans votre exemple, l'erreur est probablement due à la non-concordance entre le type d'argument attendu et le type d'argument réel. variable passée. La fonction Decode nécessite une adresse ou un pointeur vers une structure User, mais vous transmettez la valeur directement. Pour résoudre ce problème, vous pouvez utiliser l'opérateur & pour obtenir l'adresse de la variable utilisateur :
if err := decoder.Decode(&u); err != nil { http.Error(rw, "could not decode request", http.StatusBadRequest) return }
Les pointeurs sont des variables qui contiennent les adresses d'autres variables. L'opérateur & renvoie l'adresse d'une variable, tandis que l'opérateur * nous permet d'accéder à la valeur à cette adresse.
Dans l'exemple ci-dessus, &u donne l'adresse de la structure User, qui est ensuite transmise à la Fonction de décodage qui attend un pointeur.
Cependant, si vous aviez créé l'instance utilisateur en utilisant :
u := new(User)
Alors vous seriez déjà un pointeur, et l'opérateur & ne serait pas nécessaire. Vous pouvez également créer explicitement un pointeur en utilisant :
var u *User
La principale différence entre & et * est que * représente une redirection vers la valeur stockée à l'adresse, tandis que & renvoie l'adresse lui-même.
Exemple :
var y int var pointerToY *int var pointerToPointerToInt **int y = 10 pointerToY = &y pointerToPointerToInt = &pointerToY
Maintenant :
& (Adresse de l'opérateur) :
Exemple :
func swap(x, y *int) { *x, *y = *y, *x }
* (Opérateur de déréférencement) :
Exemple :
var p *int *p = 10
Conclusion :
Comprendre les pointeurs & et est crucial dans Go pour une gestion efficace des variables et la résolution des erreurs du compilateur. La distinction clé réside dans le comportement de « redirection » de , tandis que & renvoie l'adresse réelle de la variable. En examinant attentivement les scénarios d'utilisation prévus, vous pouvez exploiter efficacement les pointeurs de votre code Go pour des performances et une exactitude optimales.
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!