Liste des méthodes publiques d'un package dans Go
Question :
Comment est-ce possible énumérer les méthodes publiques d'un package dans Go ? Considérez la structure de code suivante :
main.go :
package main func main() { // list public methods in here }
libs/method.go :
package libs func Result1() { fmt.Println("method Result1") } func Result2() { fmt.Println("method Result2") }
Réponse :
Malheureusement, Go ne dispose pas d'une fonctionnalité directe pour cette demande. Lorsqu'un package est importé, le compilateur peut supprimer les méthodes inutilisées lors de l'optimisation. Ainsi, la simple importation d'un package ne garantit pas la présence de toutes les méthodes.
Alternatives :
Analyse statique :
Vous pouvez analyser le code source du package et extraire les déclarations de fonctions à l'aide de la bibliothèque de réflexion de Go. Prenons l'exemple suivant :
import ( "fmt" "go/parser" "go/token" ) func main() { fileset := token.NewFileSet() packages, err := parser.ParseDir(fileset, "./libs", nil, 0) if err != nil { fmt.Println("Parsing failed:", err) return } methods := []string{} for _, p := range packages { // Get all methods in each source file. for _, f := range p.Files { for _, dec := range f.Decls { if fn, ok := dec.(*parser.FuncDecl); ok && fn.Name.IsExported() { methods = append(methods, fn.Name.String()) } } } } fmt.Println("Exported methods in package 'libs':", methods) }
Remarque : Cette approche ne fournit que des déclarations de fonctions, pas leurs implémentations.
Réflexion dynamique :
Vous pouvez également utiliser le package Reflect de Go au moment de l'exécution pour inspecter les méthodes d'une valeur. Cependant, cela nécessite de disposer d'une instance initialisée du type en question.
N'oubliez pas que ces approches ont des limites et peuvent ne pas convenir à tous les cas d'utilisation.
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!