Maison >développement back-end >Golang >Comment les pointeurs affectent-ils la modification de la valeur dans les fonctions Go ?

Comment les pointeurs affectent-ils la modification de la valeur dans les fonctions Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 02:32:02645parcourir

How do pointers affect value modification in Go functions?

Comprendre la modification de valeurs avec des pointeurs dans Go

Dans Go, les pointeurs permettent un accès indirect et une modification des valeurs. Cependant, comprendre le fonctionnement des pointeurs est crucial lors de leur transmission à des fonctions.

Lors du passage d'un pointeur vers une fonction, deux scénarios se présentent : modification de valeur ou réaffectation de pointeur.

Scénario 1 : Modification de la valeur

Considérez ce code :

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

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}</code>

Ici, la fonction f reçoit un pointeur vers la structure Test. À l'intérieur de f, le pointeur déréférencé (*p) se voit attribuer une nouvelle structure Test avec une valeur de 4. Cela modifie effectivement la structure i d'origine dans la fonction principale, et la sortie est 4.

Scénario 2 : Réaffectation du pointeur

Maintenant, modifions légèrement le code :

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

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &amp;Test{4}
}</code>

Dans ce cas, au lieu de modifier la valeur pointée, la fonction réaffecte le pointeur p à un nouveau Testez la structure avec une valeur de 4. Puisque p est une variable locale dans f, ce changement n'affecte pas la structure i d'origine dans la fonction principale et la sortie reste 2.

Solution : modification de la structure pointue. Value

Pour modifier la valeur pointée, nous devons déréférencer le pointeur et accéder directement au membre de la struct :

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

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}</code>

En utilisant p.Value, nous modifions le champ Value de la struct d'origine , ce qui donne une sortie de 4.

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