Maison >développement back-end >Golang >Comment lister les méthodes publiques d'un package Go ?

Comment lister les méthodes publiques d'un package Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 12:13:14419parcourir

How to List Public Methods of a Go Package?

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!

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