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
Susan Sarandonoriginal
2024-12-14 07:25:11622parcourir

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
}
// 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)
    }
}

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
}
// 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"
}

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