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!