Maison > développement back-end > Golang > Comment puis-je récupérer la signature d'une fonction Go sous forme de chaîne ?

Comment puis-je récupérer la signature d'une fonction Go sous forme de chaîne ?

Patricia Arquette
Libérer: 2024-11-23 00:12:34
original
1042 Les gens l'ont consulté

How Can I Retrieve a Go Function's Signature as a String?

Récupération de la signature d'une fonction sous forme de chaîne dans Go

Dans Go, déterminer la signature d'une fonction avec un nom et une signature spécifiques dans le Le package principal est crucial pour fournir des messages d'erreur informatifs en cas de divergences.

Peut refléter.Type.String() Récupérer le Signature ?

Bien que reflex.Type.String() propose le nom du type (comme main.ModuleInitFunc), il ne parvient pas à fournir la signature complète. Cela est particulièrement évident lorsqu'il s'agit de valeurs de fonction qui ont des types nommés.

Construction de la signature

Pour construire la signature, nous devons collecter manuellement les informations du reflet.Type .

  • Type.In() fournit le type du iième paramètre.
  • Type.Out() fournit le type du iième type de résultat.

Exemple d'implémentation

Ci-dessous un exemple de fonction qui génère la signature d'une valeur de fonction :

func signature(f interface{}) string {
    t := reflect.TypeOf(f)
    if t.Kind() != reflect.Func {
        return "<not a function>"
    }

    ...

    return buf.String()
}
Copier après la connexion

Cette fonction construit la signature en parcourant les types d'entrée et de sortie et en les assemblant dans une chaîne lisible par l'homme.

Test de la fonction de signature

Le test de la fonction de signature donne les résultats suivants :

fmt.Println(signature(func(i int) error { return nil })) // func (int) error
fmt.Println(signature(myFunc)) // func (int) error
fmt.Println(signature(time.Now)) // func () time.Time
fmt.Println(signature(os.Open)) // func (string) (*os.File, error)
fmt.Println(signature(log.New)) // func (io.Writer, string, int) *log.Logger
fmt.Println(signature("")) // <not a function>
Copier après la connexion

Il est important de noter que Go ne donne pas accès aux noms de paramètres et de types de résultats, ils sont donc omis du signature.

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