Maison >développement back-end >Golang >Go peut-il transmettre des fonctions en tant que paramètres comme Java ?

Go peut-il transmettre des fonctions en tant que paramètres comme Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-03 19:35:10310parcourir

Can Go Pass Functions as Parameters Like Java?

Fonctions en tant que paramètres dans Go

Dans les langages de programmation comme Java, il est possible de transmettre des fonctions en tant que paramètres à d'autres fonctions. Cela permet un haut degré de flexibilité et de réutilisation du code. Go offre-t-il une fonctionnalité similaire ?

Fermeture de fonction de Go

Oui, Go prend en charge le passage de fonctions en tant que paramètres via un concept connu sous le nom de fermetures de fonctions. Les fermetures sont des fonctions qui peuvent faire référence et conserver la portée et les variables de la fonction englobante à partir de laquelle elles sont déclarées.

Implémentation

Dans Go, les fonctions sont de première classe citoyens, ce qui signifie qu'ils peuvent être affectés à des variables, passés en arguments et renvoyés en tant que valeurs. Pour passer une fonction en paramètre, affectez-la simplement à une variable de type func(paramList) returnType.

Exemple

Considérez l'extrait de code suivant :

package main

import "fmt"

// define a function that converts an integer to a string
func convert(x int) string {
    return fmt.Sprintf("%v", x)
}

// define a function that passes a function as a parameter
func quote123(fn func(int) string) string {
    return fmt.Sprintf("%q", fn(123))
}

func main() {
    result := quote123(convert)
    fmt.Println(result) // Output: "123"
}

Dans cet exemple, nous définissons une fonction appelée convert qui convertit un entier en valeur de chaîne. Nous passons ensuite cette fonction en paramètre à une autre fonction appelée quote123. La fonction quote123 prend une fonction de type func(int) string comme argument. Dans la fonction, nous appelons la fonction transmise et transmettons la valeur 123. Le résultat est renvoyé sous forme de chaîne entre guillemets.

Exemples supplémentaires

Vous pouvez également définir et transmettre des fonctions anonymes en tant que paramètres. Par exemple :

result := quote123(func(x int) string { return fmt.Sprintf("%b", x) })
fmt.Println(result) // Output: "1111011"

Dans ce cas, nous transmettons une fonction anonyme qui convertit un entier en sa représentation binaire.

Interfaces fonctionnelles

Go n'a pas d'interfaces fonctionnelles explicites comme Java ou C#. Cependant, vous pouvez définir vos propres types qui nécessitent des signatures de fonction spécifiques. Par exemple, vous pourriez définir le type suivant :

type MyFunctionType func(int) string

Ce type nécessiterait que toute fonction passée en paramètre ait la signature suivante : func(int) string. Vous pouvez ensuite utiliser ce type pour vous assurer que seules les fonctions avec la signature correcte sont transmises.

Conclusion

Go fournit des mécanismes puissants pour transmettre des fonctions en tant que paramètres via des fermetures de fonctions. Cela permet une grande flexibilité et une réutilisation du code, faisant de Go un excellent choix pour les applications nécessitant des fonctions d'ordre supérieur.

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