Maison  >  Article  >  développement back-end  >  passage du paramètre de fermeture de la fonction golang

passage du paramètre de fermeture de la fonction golang

王林
王林original
2024-04-22 16:15:011082parcourir

En langage Go, les fermetures peuvent transmettre des valeurs de paramètres ou des références. Passer une valeur crée une copie de la valeur dans la fermeture, et les modifications apportées à cette copie ne sont valides que dans la fermeture et n'affectent pas le paramètre d'origine ; le passage d'une référence crée un pointeur vers le paramètre dans la fermeture et modifie le pointeur ; Mettez à jour les paramètres d'origine. Lorsqu'un paramètre est passé par valeur, la valeur du paramètre d'origine reste inchangée, tandis que lorsqu'un paramètre est passé par référence, la valeur du paramètre d'origine est modifiée.

passage du paramètre de fermeture de la fonction golang

Paramètre passant dans les fermetures de fonction Go

Introduction

En langage Go, une fermeture est une fonction dont la portée contient la portée de sa fonction de création. Cela permet à la fermeture d'accéder et de modifier les variables déclarées dans la fonction de création, même après le retour de la fonction de création.

Passage de paramètres

Lors du passage de paramètres dans une fermeture, vous devez déterminer si le paramètre transmis est une valeur ou une référence.

  • Passer la valeur : Passer la valeur d'un paramètre crée une copie de cette valeur dans la fermeture. Toute modification apportée à cette copie se limite à la fermeture et n'affecte pas les paramètres d'origine.
  • Passage par référence : Passage d'un paramètre par référence crée un pointeur vers ce paramètre dans la fermeture. Toute modification apportée à ce pointeur met à jour le paramètre d'origine.

Exemple en action

L'exemple suivant montre comment utiliser les fermetures pour transmettre des paramètres et modifier des variables externes :

package main

import "fmt"

func main() {
    // 声明一个外层函数并传递一个值
    counter := func(num int) {
        num++ // 对参数的值进行修改
        fmt.Println("Value in closure:", num)
    }

    // 调用外层函数,传递一个值
    num := 10
    counter(num)

    fmt.Println("Value outside closure:", num) // 值不会改变
}

Sortie :

Value in closure: 11
Value outside closure: 10

Dans cet exemple, counter est une fermeture, Il modifie la valeur de num. Cependant, puisque num est passé par valeur, les modifications apportées à num sont limitées à la fermeture, tandis que la variable externe num reste inchangée. counter 是一个闭包,它对 num 的值进行修改。但是,由于 num 是通过值传递的,对 num 的修改仅限于闭包中,而外部变量 num 保持不变。

传递引用

要通过引用传递参数,可以使用指针:

package main

import "fmt"

func main() {
    // 声明一个外层函数并传递一个引用
    counter := func(num *int) {
        *num++ // 对指针所指向的值进行修改
        fmt.Println("Value in closure:", *num)
    }

    // 调用外层函数,传递一个引用
    num := 10
    counter(&num)

    fmt.Println("Value outside closure:", num) // 值会改变
}

输出:

Value in closure: 11
Value outside closure: 11

在该示例中,num 是通过指针传递的,这使得闭包可以修改外部变量 num

🎜Passage par référence🎜🎜🎜Pour passer des paramètres par référence, vous pouvez utiliser des pointeurs : 🎜rrreee🎜Sortie : 🎜rrreee🎜Dans cet exemple, num est passé par pointeur, ce qui rend la fermeture Modifier la valeur de la variable externe num. 🎜

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