Méthodes de passage de paramètres dans Golang

巴扎黑
Libérer: 2017-09-09 11:07:05
original
2442 Les gens l'ont consulté

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

Le résultat de l'exécution de la fonction est :


befor:[0 0 0]
after:[9 0 0]
Copier après la connexion

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

Résultat de l'exécution :


modifyFunc: 0x0
main: 0xc820049f30
Copier après la connexion

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal