Maison > développement back-end > Golang > Comment puis-je répertorier par programme les méthodes publiques dans un package Go ?

Comment puis-je répertorier par programme les méthodes publiques dans un package Go ?

Susan Sarandon
Libérer: 2025-01-05 10:33:46
original
800 Les gens l'ont consulté

How Can I Programmatically List Public Methods in a Go Package?

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

Question :

Comment puis-je lister toutes les méthodes publiques disponibles dans un package spécifique dans Partir ?

Problème :

Considérez le projet suivant structure :

  • main.go:

    package main
    
    func main() {
      // List all public methods here.
    }
    Copier après la connexion
  • l ibs/method.go :

    package libs
    
    func Result1() {
      fmt.Println("Method Result1")
    }
    
    func Result2() {
      fmt.Println("Method Result2")
    }
    Copier après la connexion

Réponse :

Pendant que il peut paraître simple de lister des méthodes publiques en utilisant la réflexion, ce n'est malheureusement pas directement possible dans Go. En effet, le compilateur optimise les fonctions inutilisées et les supprime de l'exécutable final.

Approche alternative :

Si vous devez analyser les déclarations de fonction du package de manière statique, vous pouvez utilisez le package go/parser :

import (
    "fmt"
    "go/ast"
    "go/parser"
    "go/token"
    "os"
)

func main() {
    set := token.NewFileSet()
    packs, err := parser.ParseDir(set, "sub", nil, 0)
    if err != nil {
        fmt.Println("Failed to parse package:", err)
        os.Exit(1)
    }

    funcs := []*ast.FuncDecl{}
    for _, pack := range packs {
        for _, f := range pack.Files {
            for _, d := range f.Decls {
                if fn, isFn := d.(*ast.FuncDecl); isFn {
                    funcs = append(funcs, fn)
                }
            }
        }
    }

    fmt.Printf("All functions: %+v\n", funcs)
}
Copier après la connexion

Cette approche vous fournira une liste de déclarations de fonctions, bien qu'elles soient non invocable. Pour exécuter ces fonctions, vous devrez créer un fichier séparé et les appeler individuellement.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal