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
Libérer: 2024-12-04 12:12:26
original
278 Les gens l'ont consulté

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))
}
Copier après la connexion

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

123
99
Copier après la connexion

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])
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal