Maison > Article > développement back-end > Comment modifier la valeur d'un type simple à l'aide d'un récepteur pointeur dans Go ?
Modifier la valeur d'un type simple via un récepteur de pointeur dans Go
Modifier la valeur d'un type simple via une méthode de récepteur de pointeur peut être un tâche courante dans Go. Cependant, comprendre comment les pointeurs se comportent dans ce contexte est crucial.
Dans l'exemple fourni :
<br>tapez FooInt int</p> <p>func (fi *FooInt ) FromString(i string) {</p> <pre class="brush:php;toolbar:false">num, _ := strconv.Atoi(i) tmp := FooInt(num) fi = &tmp
}
Lorsqu'un pointeur est passé en tant que récepteur, une copie de ce pointeur est créée dans la méthode . Toute modification apportée à la copie à l'intérieur de la méthode n'affectera pas le pointeur d'origine.
Dans l'extrait de code, *fi est une copie du pointeur fi transmis à la méthode FromString. Lorsque vous attribuez &tmp à *fi, vous modifiez essentiellement la valeur de la copie, pas le pointeur fi d'origine.
Pour modifier la valeur du pointeur d'origine, vous devez soit :
Renvoyer la nouvelle valeur du pointeur :
<br> func (fi <em>FooInt) FromString(i string) </em>FooInt {</p> <pre class="brush:php;toolbar:false"> num, _ := strconv.Atoi(i) tmp := FooInt(num) return &tmp
}
Passez un pointeur non nul vers la valeur que vous souhaitez modifier :
<br> func (fi <em>FooInt) FromString(i string, p </em>*FooInt) {</p> <pre class="brush:php;toolbar:false"> num, _ := strconv.Atoi(i) tmp := FooInt(num) *p = &tmp
}
Assurez-vous que le récepteur n'est pas nul :
<br> func (fi *FooInt) FromString(i string) {</p> <pre class="brush:php;toolbar:false"> num, _ := strconv.Atoi(i) *fi = FooInt(num)
}
En vous assurant que le récepteur est un pointeur valide et en modifiant la valeur pointée à l'intérieur de la méthode, vous pouvez modifier efficacement la valeur du type simple d'origine via un pointeur récepteur.
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!