Maison >développement back-end >Golang >Comment puis-je transmettre des fonctions comme arguments dans Go ?

Comment puis-je transmettre des fonctions comme arguments dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-04 12:12:26281parcourir

How Can I Pass Functions as Arguments in Go?

Passer des fonctions comme arguments : une approche de métaprogrammation en Golang

Comme nous le savons, les fonctions Golang sont des valeurs de première classe, éliminant le besoin de astuces de métaprogrammation courantes dans les langages dynamiques. Pour passer une fonction comme argument à une autre fonction, nous pouvons simplement utiliser la prise en charge inhérente de Golang pour les valeurs de fonction. Voici un exemple :

package main

import "fmt"

func someFunction1(a, b int) int {
    return a + b
}

func someFunction2(a, b int) int {
    return a - b
}

func someOtherFunction(a, b int, f func(int, int) int) int {
    return f(a, b)
}

func main() {
    fmt.Println(someOtherFunction(111, 12, someFunction1))
    fmt.Println(someOtherFunction(111, 12, someFunction2))
}

L'exécution de ce programme produira le résultat suivant :

123
99

Maintenant, considérons un scénario dans lequel la sélection de la fonction dépend d'un temps d'exécution. seule valeur connue. Pour gérer cela, nous pouvons créer une carte qui associe les noms de fonctions à leurs pointeurs de fonction respectifs :

m := map[string]func(int, int) int{
    "someFunction1": someFunction1,
    "someFunction2": someFunction2,
}

...

z := someOtherFunction(x, y, m[key])

De cette façon, nous pouvons passer une fonction comme argument par son nom, en sélectionnant dynamiquement la fonction souhaitée à exécution.

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