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
Libérer: 2024-10-27 02:32:02
original
644 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

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