Maison > développement back-end > Golang > Comment modifier les valeurs via des pointeurs dans les fonctions Go, et quelles sont les différentes approches ?

Comment modifier les valeurs via des pointeurs dans les fonctions Go, et quelles sont les différentes approches ?

Susan Sarandon
Libérer: 2024-10-28 05:10:30
original
652 Les gens l'ont consulté

How do I modify values through pointers in Go functions, and what are the different approaches?

Modification des valeurs via des pointeurs dans Go

Dans Go, passer des pointeurs vers des fonctions permet une manipulation directe des valeurs pointées. Cependant, il y a certaines nuances à prendre en compte lors de l'attribution de valeurs aux pointeurs.

Attribution de pointeurs sans modification de valeur

Considérez le code suivant :

<code class="go">type Test struct {
    Value int
}

func main() {
    var i Test = Test{2}
    var p *Test = &i
    f(p)
    println(i.Value) // 2
}

func f(p *Test) {
    // Assigning a new pointer value
    p = &Test{4}
}</code>
Copier après la connexion

Dans ce code, p est un pointeur vers la structure i. Dans la fonction f, l'attribution d'une nouvelle valeur de pointeur à p ne modifie pas la valeur de i. En effet, p est une variable locale dans f et changer sa valeur n'affecte que la copie locale.

Modifier les valeurs pointues

Pour modifier réellement la valeur de i, vous besoin de changer la valeur de la structure pointée. Cela peut être fait via l'opérateur de déréférencement (*). Par exemple :

<code class="go">func f(p *Test) {
    p.Value = 4
}</code>
Copier après la connexion

Ici, p.Value déréférence le pointeur p et attribue la valeur 4 au champ Value de la structure pointée. Ce changement sera reflété dans i lorsque f reviendra.

Attribution de pointeurs aux pointeurs

Vous pouvez également modifier le pointeur lui-même dans la fonction f. Cependant, cela nécessite de transmettre l'adresse de la variable pointeur (&p) à f.

<code class="go">func f(p **Test) {
    *p = &Test{4}
}</code>
Copier après la connexion

Dans ce cas, *p déréférence le double pointeur p et attribue une nouvelle valeur de pointeur, modifiant ainsi la variable p en principal. Cependant, cette approche n'est pas aussi simple et peut être moins efficace que la modification directe de la valeur pointée.

Conclusion

Lors du passage de pointeurs vers des fonctions, il est crucial de comprendre le différence entre l'attribution de nouveaux pointeurs (p = &Test{4}) et la modification des valeurs pointées (p.Value = 4). Cette dernière approche permet une manipulation directe de la valeur de la structure, tandis que la première ne modifie que le pointeur lui-même.

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