Maison > développement back-end > Golang > Analyse de la fonction anonyme et du principe de fermeture de Golang

Analyse de la fonction anonyme et du principe de fermeture de Golang

WBOY
Libérer: 2024-05-03 10:12:02
original
523 Les gens l'ont consulté

Oui, les fonctions anonymes dans Go peuvent être utilisées pour définir rapidement des fonctions ponctuelles ou des fonctions qui sont exécutées immédiatement, tandis que les fermetures sont utilisées pour bloquer les variables locales dans la fonction anonyme afin que ces variables soient accessibles même si cette dernière revient.

Analyse de la fonction anonyme et du principe de fermeture de Golang

Comprendre les fonctions anonymes et les fermetures dans Go

Les fonctions anonymes sont des fonctions qui sont définies directement sans définir de nom de fonction. Ils sont souvent utilisés pour définir des fonctions ponctuelles ou des fonctions qui doivent être exécutées immédiatement. Syntaxe :

func() {
  // 函数体
}
Copier après la connexion

La fermeture est une technique qui "bloque" les variables locales dans une fonction anonyme afin que les variables locales soient accessibles même après le retour de la fonction anonyme. Ceci peut être réalisé en utilisant une fonction anonyme comme valeur de retour d'une autre fonction ou méthode. Syntaxe :

func makeCounter() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}
Copier après la connexion

Cas pratique : Générer des nombres aléatoires

Le code suivant utilise des fonctions anonymes et des fermetures pour générer une fonction qui génère des nombres aléatoires :

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    // 创建一个匿名函数,生成一个随机数
    randomFunc := func() int {
        rand.Seed(time.Now().UnixNano())
        return rand.Intn(100)
    }

    // 将匿名函数包装在一个闭包中,封锁随机数生成器
    getRand := func(r func() int) func() int {
        return func() int {
            return r()
        }
    }(randomFunc)

    // 生成 10 个随机数并打印
    for i := 0; i < 10; i++ {
        fmt.Println(getRand())
    }
}
Copier après la connexion

Sortie :

32
78
15
64
12
99
17
42
5
37
Copier après la connexion

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