Maison  >  Article  >  développement back-end  >  Comment utiliser le passage des paramètres de fonction dans Go ?

Comment utiliser le passage des paramètres de fonction dans Go ?

WBOY
WBOYoriginal
2023-05-11 17:00:331901parcourir

Go est un langage de programmation fortement typé, et ses paramètres de fonction sont passés par valeur. Cela signifie que lorsque vous transmettez un paramètre à une fonction, vous faites en fait une copie de la valeur du paramètre et transmettez cette valeur à la fonction pour traitement. Par conséquent, lorsque vous utilisez le passage de paramètres de fonction dans Go, vous devez faire attention aux points suivants :

  1. La différence entre les types valeur et les types référence
#🎜 🎜#In Go En plus des types de données de base, qui sont des types valeur, tous les types de données sont des types référence. Lorsque des données de type valeur sont transmises en tant que paramètre de fonction, une copie de la valeur sera transmise à la fonction ; tandis que lorsque des données de type référence sont transmises en tant que paramètre de fonction, l'adresse des données en mémoire sera transmise.

Par exemple, regardons le processus de passage des paramètres de type valeur et de type référence respectivement :

package main

import "fmt"

func main() {
    // 值类型参数传递
    var a = 10
    fmt.Println("Before call func: ", a) // 输出 10

    changeByVal(a)

    fmt.Println("After call func: ", a) // 输出 10

    // 引用类型参数传递
    var b = []int{1, 2, 3}
    fmt.Println("Before call func: ", b) // 输出 [1 2 3]

    changeByRef(b)

    fmt.Println("After call func: ", b) // 输出 [4 5]
}

// 值类型参数传递
func changeByVal(num int) {
    num = 100
}

// 引用类型参数传递
func changeByRef(arr []int) {
    arr[0] = 4
    arr[1] = 5
}

Nous pouvons voir cela dans le cas du passage de paramètres de type valeur, même si La valeur du paramètre est modifiée à 100 à l'intérieur de la fonction, mais la variable externe a n'est toujours pas affectée. Dans le cas du passage de paramètres de type référence, le paramètre est modifié à l'intérieur de la fonction et les données réelles en dehors de la fonction sont également affectées.

    Passage de paramètres de type pointeur
Lorsque nous voulons modifier les données de type référence, nous pouvons utiliser le passage de paramètres de type pointeur. Le pointeur est un type de données qui stocke l'adresse d'une variable, qui est également transmise par valeur dans Go.

Nous pouvons utiliser l'opérateur & pour obtenir l'adresse d'une variable, et l'opérateur * pour obtenir les données stockées dans l'adresse.

Par exemple :

package main

import "fmt"

func main() {
    var a = 10
    var b *int

    b = &a

    fmt.Println("Before call func: ", a) // 输出 10

    changeByPtr(b)

    fmt.Println("After call func: ", a) // 输出 100
}

func changeByPtr(num *int) {
    *num = 100
}

Nous pouvons constater que les données pointées par le pointeur (variable d'origine a) sont modifiées à l'intérieur de la fonction, et les données externes réelles sont également affectées .

    Utiliser... pour représenter des paramètres de longueur variable
Si notre fonction doit recevoir des paramètres de longueur variable, nous pouvons également utiliser. .. pour représenter . Cette syntaxe est similaire aux arguments et kwargs en Python.

Par exemple :

package main

import "fmt"

func main() {
    printNames("John", "Alice", "Bob")
}

func printNames(names ...string) {
    for _, name := range names {
        fmt.Println(name)
    }
}

Dans cet exemple, nous définissons une fonction printNames avec des paramètres de longueur variable, et le type de paramètre qu'elle reçoit est une chaîne. À l'intérieur de la fonction, nous utilisons range pour parcourir tous les paramètres et afficher leurs valeurs une par une.

Résumé

Dans Go, les paramètres de fonction sont transmis par valeur, vous devez donc faire attention à la différence entre les types valeur et les types référence. Lorsque vous devez modifier des données de type référence, vous pouvez utiliser le passage de paramètres de type pointeur. De plus, nous pouvons également utiliser... pour représenter des paramètres de longueur variable, ce qui permet à la fonction de recevoir plus facilement des paramètres de longueur variable.

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