Des mots-clés Go tels que go et defer attendent des appels de fonction en tant que paramètres. Existe-t-il un type dédié qui peut servir le même objectif, permettant aux fonctions de recevoir des appels de fonction comme arguments au lieu de fonctions ?
Malheureusement, il n'existe pas de type de ce type dans Aller. Le comportement de go et defer est intégré à la spécification du langage et appliqué par le compilateur.
Au lieu de cela, il est possible d'utiliser des valeurs de fonction comme variables ou valeurs. Celles-ci peuvent être appelées plus tard comme s'il s'agissait de fonctions normales.
<code class="go">func myFunc() { fmt.Println("hi") } func main() { var f func() f = myFunc f() // This calls the function value stored in f: myFunc in this example }</code>
Dans certains cas, il est souhaitable d'avoir une sauvegarde automatique des paramètres pour les appels de fonction. Pour des types de fonctions spécifiques, cela peut être réalisé en introduisant des fonctions d'assistance avec des signatures identiques qui renvoient des fonctions sans paramètre. Ces fermetures appellent la fonction d'origine avec les paramètres enregistrés.
La réflexion peut être utilisée pour éviter la copie manuelle des paramètres. Cependant, cela implique de transmettre la fonction plutôt que de l'appeler, ce qui ralentit le processus.
Il existe une exception lors de l'utilisation de méthodes. Les valeurs de méthode peuvent enregistrer une copie du récepteur, permettant ainsi l'enregistrement automatique des paramètres pour les appels de méthode.
<code class="go">type myParams struct { format string i int s string } func (mp myParams) Call() { fmt.Printf(mp.format, mp.i, mp.s) } func main() { p := myParams{format: "%d %q\n", i: 1, s: "Hello, playground"} launch(p.Call) // p is saved here p.i, p.s = 2, "changed" time.Sleep(time.Second) }</code>
Remarque : Aucune de ces approches ne fournit une correspondance exacte pour la fonctionnalité souhaitée. Si les paramètres sont susceptibles de changer, une copie manuelle est nécessaire avant de transmettre la fonction à un assistant qui enregistre les paramètres.
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!