Maison > développement back-end > Golang > Comment puis-je découvrir tous les types exportés dans un package Go ?

Comment puis-je découvrir tous les types exportés dans un package Go ?

Susan Sarandon
Libérer: 2024-12-14 07:25:11
original
620 Les gens l'ont consulté

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

Découvrez les types exportés dans un package

Lors de la collaboration entre plusieurs packages au sein d'un projet Go, il devient souvent nécessaire d'accéder et d'exploiter les types exportés à partir d'autres paquets. Cet article explore deux techniques efficaces pour obtenir tous les types définis dans un package, permettant aux développeurs d'intégrer de manière transparente des types externes dans leur propre base de code.

1. Utilisation de go/importer

Le package go/importer fournit un mécanisme simple pour importer un package et introspecter son contenu. Ceci peut être réalisé via la fonction Import, qui renvoie un objet Package une fois le package importé avec succès. L'objet Package renvoyé contient une multitude d'informations, y compris la portée des identifiants déclarés. En parcourant la méthode Names du Scope, vous pouvez acquérir les noms de tous les types exportés dans le package.

Exemple :

package demo

type People struct {
    Name string
    Age  uint
}

type UserInfo struct {
    Address  string
    Hobby    []string
    NickNage string
}
Copier après la connexion
Copier après la connexion
// In a separate package
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)
    }
}
Copier après la connexion

2. Reflection

Reflection propose une approche dynamique pour inspecter les types au moment de l'exécution. En utilisant la fonction TypeOf, vous pouvez obtenir les informations de type pour n'importe quelle valeur, y compris son nom et sa structure sous-jacente.

Exemple :

package demo

type People struct {
    Name string
    Age  uint
}

type UserInfo struct {
    Address  string
    Hobby    []string
    NickNage string
}
Copier après la connexion
Copier après la connexion
// In a separate package
import (
    "fmt"
    "reflect"
)

func main() {
    peopleType := reflect.TypeOf(People{})
    fmt.Println(peopleType.Name()) // Prints "People"

    userInfoType := reflect.TypeOf(UserInfo{})
    fmt.Println(userInfoType.Name()) // Prints "UserInfo"
}
Copier après la connexion

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