Maison  >  Article  >  développement back-end  >  Méthodes de passage de paramètres dans Golang

Méthodes de passage de paramètres dans Golang

巴扎黑
巴扎黑original
2017-09-09 11:07:052262parcourir

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!

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