Maison  >  Article  >  développement back-end  >  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
Susan Sarandonoriginal
2024-10-28 05:10:30558parcourir

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>

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>

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>

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!

Déclaration:
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