Comprendre le passage par référence et valeur dans les fonctions Go
Dans Go, le concept de passage par référence et valeur peut prêter à confusion au début. Pour clarifier, il convient de noter que Go prend principalement en charge la transmission par valeur. Cependant, lors du passage d'un pointeur vers un objet, il imite le passage par référence.
Pour comprendre cela, considérons la fonction Java suivante :
databaseFunction(DatabaseType db) { // do something }
Dans ce code, la base de données de l'instance DatabaseType est transmis à la fonction par valeur. Cependant, dans Go, il peut être représenté comme :
func PutTasks(db *sql.DB) echo.HandlerFunc { }
Dans l'exemple Go, l'astérisque * avant sql.DB implique que la fonction attend un pointeur vers une instance sql.DB. En effet, dans Go, les valeurs des types de pointeurs contiennent des adresses.
Selon l'aide-mémoire que vous avez mentionné, la syntaxe func PrintPerson(p *Person) indique que la fonction n'accepte qu'une adresse de pointeur vers un objet Person. La raison de l'utilisation d'un pointeur ici est de permettre à la fonction de modifier l'objet d'origine qui a été transmis.
Pour une démonstration plus approfondie, considérons le code Go suivant :
func someFunc(x *int) { *x = 2 // Whatever variable caller passed in will now be 2 y := 7 x = &y // has no impact on the caller because we overwrote the pointer value! }
Dans cet exemple , x est un pointeur vers un entier. En le déréférençant, on peut directement modifier la valeur vers laquelle il pointe. Cependant, réaffecter x pour pointer vers une variable différente n'a aucun impact sur l'appelant puisqu'il n'a qu'une copie de la variable pointeur, pas la valeur vers laquelle elle pointait à l'origine.
Par conséquent, l'utilisation de pointeurs fournit un mécanisme pour partager des valeurs entre l'appelant et la fonction, permettant aux modifications apportées au sein de la fonction d'être reflétées dans l'objet d'origine.
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!