Maison > développement back-end > Golang > Comment puis-je découvrir tous les types exportés dans un package Go au moment de l'exécution ?

Comment puis-je découvrir tous les types exportés dans un package Go au moment de l'exécution ?

DDD
Libérer: 2025-01-05 21:04:45
original
864 Les gens l'ont consulté

How Can I Discover All Exported Types in a Go Package at Runtime?

Découverte des packages pendant l'exécution

Contrairement au package Reflect, Go ne dispose pas d'un mécanisme de découverte de types qui permet d'interroger tous les types sans les connaître explicitement. Cela soulève la question :

Existe-t-il une méthode alternative pour découvrir tous les types exportés (les structures en particulier) dans un package Go actif ?

Une solution théorique est une solution hypothétique fonction, « DiscoverTypes », qui prend un package et renvoie tous les types découverts. Cependant, cette fonction n'existe pas dans le package Reflect.

Trouver une solution

Dans Go 1.5 et versions ultérieures, les nouveaux types de packages et l'importateur offrent un moyen de inspecter les packages binaires et sources. En utilisant le code suivant, vous pouvez découvrir tous les types exportés au sein d'un package :

package main

import (
    "fmt"
    "go/importer"
)

func main() {
    pkg, err := importer.Default().Import("time")
    if err != nil {
        fmt.Printf("error: %s\n", err.Error())
        return
    }
    for _, declName := range pkg.Scope().Names() {
        fmt.Println(declName)
    }
}
Copier après la connexion

Cependant, dans les versions antérieures à 1.5, la seule approche fiable consiste à utiliser le package ast pour compiler le code source.

Cas d'utilisation réel

Cette fonctionnalité est particulièrement utile dans les utilitaires de génération de code qui identifient et instancient des types répondant à des besoins spécifiques. critères. Ces utilitaires aident à générer des fonctions de test basées sur les types découverts et réduisent le besoin d'étapes de génération manuelle de code.

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