Maison  >  Article  >  développement back-end  >  Comment utiliser les fermetures dans Go ?

Comment utiliser les fermetures dans Go ?

WBOY
WBOYoriginal
2023-05-11 17:15:241276parcourir

Go est un langage de programmation moderne, lancé pour la première fois en 2009. Il est efficace, concis et adapté à la programmation simultanée, c'est pourquoi il devient de plus en plus populaire dans le développement de logiciels d'aujourd'hui. La fermeture est une fonction très importante du langage Go, qui peut facilement implémenter des fonctions telles que les variables de fonction, la programmation asynchrone et la gestion d'état. Dans cet article, nous présenterons comment utiliser les fermetures dans Go.

1. Définition de la fermeture

Une fermeture est un objet fonction qui peut référencer des variables définies en dehors de la fonction. Dans le langage Go, les fonctions peuvent être transmises sous forme de valeurs, une fonction peut donc être définie comme une variable. Une fermeture est une fonction définie à l'intérieur d'une fonction. Elle peut accéder directement aux variables de la fonction dans laquelle elle se trouve Même si la fonction est revenue, elle peut également accéder à ces variables via la fermeture.

2. Implémentation des fermetures

En langage Go, l'implémentation des fermetures est très simple. Voici un exemple de code :

func main() {
    x := 0
    increment := func() int {
        x++
        return x
    }

    fmt.Println(increment())
    fmt.Println(increment())
}

Dans cet exemple, nous définissons une fonction de fermeture appelée incrément. Il a accès à la variable x définie dans la fonction principale dans laquelle il réside. Chaque fois que la fonction d'incrémentation est appelée, elle renvoie la nouvelle valeur de x et incrémente x de 1. Le résultat de ce qui précède sera donc :

1
2

3. Scénarios d'utilisation des fermetures

Les fermetures peuvent être appliquées à de nombreux scénarios différents. Ci-dessous, nous en présenterons quelques-unes :

  1. Variables de fonction

Une fonction peut être définie comme une variable afin qu'elle puisse être transmise et utilisée librement. Voici un exemple :

func add(x int) func(int) int {
    return func(y int) int {
        return x + y
    }
}

func main() {
    addFive := add(5)
    fmt.Println(addFive(3))
    fmt.Println(addFive(4))
}

Dans cet exemple, nous définissons une fonction add qui renvoie une autre fonction. La fonction renvoyée peut accéder à la variable x à l'intérieur de la fonction add dans laquelle elle se trouve. Ainsi, lorsque nous appelons add(5), il renvoie une fonction qui prend 5 comme valeur de x. Nous enregistrons la fonction sous addFive et pouvons ensuite l'utiliser pour effectuer l'opération d'addition.

  1. Programmation asynchrone

Les fermetures peuvent être utilisées dans les fonctions de rappel en programmation asynchrone. Voici un exemple :

func fetchData(url string, callback func(string, error)) {
    resp, err := http.Get(url)
    if err != nil {
        callback("", err)
        return
    }

    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        callback("", err)
        return
    }

    callback(string(body), nil)
}

func main() {
    fetchData("https://example.com", func(data string, err error) {
        if err != nil {
            log.Fatal(err)
        }

        fmt.Println(data)
    })
}

Dans cet exemple, nous définissons une fonction fetchData, qui peut obtenir de manière asynchrone les données de l'URL spécifiée et renvoyer les données à l'appelant via la fonction de rappel. La fonction de rappel est une fermeture qui peut référencer librement les variables de la fonction fetchData (comme l'URL).

  1. Gestion de l'état

Les fermetures peuvent être utilisées pour la gestion de l'état, c'est-à-dire que vous pouvez créer une fonction qui met automatiquement à jour son propre état à chaque fois qu'elle est appelée. Voici un exemple :

func counter() func() int {
    x := 0
    return func() int {
        x++
        return x
    }
}

func main() {
    cnt := counter()

    fmt.Println(cnt())
    fmt.Println(cnt())
    fmt.Println(cnt())
}

Dans cet exemple, nous définissons une fonction compteur qui renvoie une fonction de fermeture. Chaque fois que la fonction de fermeture est appelée, la variable x est automatiquement incrémentée de 1 et la nouvelle valeur est renvoyée. Le résultat sera donc :

1
2
3

Nous pouvons utiliser cette méthode pour gérer certaines variables d'état, telles que les calculatrices, les générateurs de nombres aléatoires, etc.

4. Résumé

La fermeture est une fonctionnalité très pratique du langage Go, qui peut nous aider à implémenter certaines fonctions de programmation avancées. Dans cet article, nous présentons la définition, la mise en œuvre et les scénarios d'utilisation courants des fermetures. J'espère que cet article vous aidera à mieux comprendre et utiliser les fermetures.

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
Article précédent:Comment utiliser Map dans Go ?Article suivant:Comment utiliser Map dans Go ?