Maison >développement back-end >Tutoriel Python >Méthodes de passage de paramètres dans Golang
Le passage des paramètres signifie que pendant le processus de transfert du programme, les paramètres réels transmettront la valeur du paramètre au paramètre formel correspondant, puis le processus de traitement et de retour des données est implémenté dans la fonction. L'article suivant le présente principalement. pour vous. Pour des informations pertinentes sur le passage des paramètres dans Golang, les amis dans le besoin peuvent s'y référer.
Avant-propos
Cet article présente principalement le contenu pertinent sur le passage des paramètres Golang et le partage pour votre référence et votre étude. Il n'y a pas grand-chose. à dire ci-dessous. Cela dit, jetons un coup d’œil à l’introduction détaillée.
Concernant le passage de paramètres, il y a cette phrase dans la documentation Golang :
après avoir été évalués, les paramètres de l'appel sont passés par valeur au
fonction et la fonction appelée commence l'exécution.
Les paramètres d'appel de fonction sont tous transmis par valeur, et non par pointeur ou référence. Il a été dérivé des tests que lorsque la variable paramètre est un type pointeur ou pointeur implicite, la méthode de transmission du paramètre se fait également par valeur (copie du pointeur lui-même)
Slice est l'une des méthodes les plus courantes. structures de données utilisées. Slice est utilisé ci-dessous. À titre d'exemple, expliquez le mécanisme de passage des paramètres de Golang.
La structure des données des tranches est la suivante :
Exemple de code :
package main import "fmt" func main(){ slice := make([]int, 3, 5) fmt.Println("before:", slice) changeSliceMember(slice) fmt.Println("after:", slice) } func changeSliceMember(slice []int) { if len(slice) > 1 { slice[0] = 9 } }
Le résultat de l'exécution de la fonction est :
befor:[0 0 0] after:[9 0 0]
Explication :
Comme le montre le diagramme de structure des données, Slice peut être compris comme un type de structure, incluant l'adresse du premier élément de le tableau sous-jacent, le tableau len et les champs capacité, l'objet slice transmet les valeurs des trois champs pendant le processus de transfert de valeur de paramètre. En fait, l'adresse mémoire de la tranche dans la fonction changeSliceMember est différente de celle. adresse mémoire de la tranche dans main, mais les valeurs des champs sont les mêmes, et La valeur du premier champ Pointeur est l'adresse du premier élément du tableau sous-jacent, donc le contenu de l'élément peut être directement modifié
.peut être comparé au code suivant pour comprendre :
package main func main() { value := new(int) modifyFunc(value) println("main:", value) } func modifyFunc(value *int) { value = nil println("modifyFunc:", value) }
Résultat de l'exécution :
modifyFunc: 0x0 main: 0xc820049f30
On peut voir que même si la valeur passée est Le pointeur n'a pas changé la valeur de la variable value dans main, car la valeur de value dans modifierFunc est un pointeur, qui est le même que la valeur dans main, mais les deux objets eux-mêmes sont deux objets que les lecteurs peuvent comprendre en détail
.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!