Maison >développement back-end >Golang >Comment puis-je récupérer tous les types exportés à partir d'un package Go sans l'importer ?

Comment puis-je récupérer tous les types exportés à partir d'un package Go sans l'importer ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-26 03:11:09473parcourir

How Can I Retrieve All Exported Types from a Go Package Without Importing It?

Comment inspecter les types exportés à partir d'un package

Dans Go, les types peuvent être exportés à partir d'un package pour les rendre accessibles à d'autres packages. Parfois, il peut être nécessaire d'accéder aux informations sur ces types exportés sans importer directement le package. Cet article explique comment exporter tous les types définis à partir d'un package particulier à l'aide du package go/importer.

Question :

Considérez le package de démonstration suivant :

package demo

type People struct {
    Name string
    Age  uint
}

type UserInfo struct {
    Address  string
    Hobby    []string
    NickNage string
}

Dans un autre package, comment récupérer tous les types exportés de la démo package?

Réponse :

Pour y parvenir, nous pouvons utiliser le package go/importer, qui fournit une API pour importer des packages et introspecter leur contenu. Voici comment procéder :

import (
    "fmt"
    "go/importer"
)

func main() {
    pkg, err := importer.Default().Import("demo")
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    for _, declName := range pkg.Scope().Names() {
        fmt.Println(declName)
    }
}

Dans ce code, nous importons d'abord le package de démonstration, puis utilisons la fonction importer.Default().Import("demo") pour obtenir le *Package représentant la démo package.

Ensuite, nous parcourons les noms de la portée du package, qui contient les noms de tous les types exportés dans ce package. Ces noms sont ensuite imprimés sur la sortie standard.

Remarque : Lors de l'exécution de ce code dans Go Playground, vous rencontrerez probablement une erreur. En effet, l'environnement de Go Playground n'a pas la capacité de récupérer les métadonnées des packages à partir de sources externes.

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