Recherche dynamique des types de packages
Malgré l'absence de mécanismes de découverte de types dans le package Reflect, d'autres méthodes existent pour découvrir les types exportés, en particulier les structures , au moment de l'exécution.
Go 1.5 et Plus tard
Dans Go 1.5 et versions ultérieures, les types et les packages d'importation peuvent vous aider dans cette tâche. L'extrait de code suivant illustre le processus :
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) } }
Versions pré-1.5
Avant Go 1.5, le package ast fournit la seule approche non hackée à ce problème. . En compilant le code source, ce package peut extraire des informations de type :
package main import ( "fmt" "go/ast" "go/parser" "go/token" ) func main() { fset := token.NewFileSet() node, err := parser.ParseFile(fset, "time.go", nil, parser.ParseComments) if err != nil { fmt.Printf("error: %s\n", err.Error()) return } ast.Inspect(node, func(n ast.Node) bool { if n, ok := n.(*ast.TypeSpec); ok { fmt.Println(n.Name.Name) } return true }) }
Ces techniques permettent la découverte de types exportés, en particulier les structures, dans les packages Go en cours d'exécution, permettant une analyse plus approfondie et une instanciation des instances.
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!