In Go können Typen aus einem Paket exportiert werden, um sie für andere Pakete zugänglich zu machen. Manchmal kann es erforderlich sein, auf Informationen zu diesen exportierten Typen zuzugreifen, ohne das Paket direkt zu importieren. In diesem Artikel wird erläutert, wie Sie mithilfe des Pakets go/importer alle definierten Typen aus einem bestimmten Paket exportieren können.
Frage:
Betrachten Sie das folgende Demopaket:
package demo type People struct { Name string Age uint } type UserInfo struct { Address string Hobby []string NickNage string }
Wie können wir in einem anderen Paket alle exportierten Typen aus der Demo abrufen? Paket?
Antwort:
Um dies zu erreichen, können wir das Paket go/importer verwenden, das eine API zum Importieren von Paketen und zum Überprüfen ihres Inhalts bereitstellt. So geht's:
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) } }
In diesem Code importieren wir zuerst das Demo-Paket und verwenden dann die Funktion importer.Default().Import("demo"), um das *Package zu erhalten, das die Demo darstellt Paket.
Als nächstes iterieren wir über die Namen des Paketbereichs, der die Namen aller exportierten Typen in diesem Paket enthält. Diese Namen werden dann in der Standardausgabe ausgegeben.
Hinweis: Wenn Sie diesen Code in Go Playground ausführen, wird wahrscheinlich ein Fehler auftreten. Dies liegt daran, dass die Go Playground-Umgebung nicht über die Möglichkeit verfügt, Paketmetadaten aus externen Quellen abzurufen.
Das obige ist der detaillierte Inhalt vonWie kann ich alle exportierten Typen aus einem Go-Paket abrufen, ohne es zu importieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!