首页 >后端开发 >Golang >如何以编程方式列出 Go 包中的公共方法?

如何以编程方式列出 Go 包中的公共方法?

Susan Sarandon
Susan Sarandon原创
2025-01-05 10:33:46847浏览

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

如何在 Go 中列出包的公共方法

问题:

如何我可以列出特定包中可用的所有公共方法吗去吗?

问题:

考虑以下项目结构:

  • main.go:

    package main
    
    func main() {
      // List all public methods here.
    }
  • l ibs/method.go:

    package libs
    
    func Result1() {
      fmt.Println("Method Result1")
    }
    
    func Result2() {
      fmt.Println("Method Result2")
    }

答案:

同时使用反射列出公共方法似乎很简单,但不幸的是在 Go 中不能直接实现。这是因为编译器优化了未使用的函数并将它们从最终的可执行文件中删除。

替代方法:

如果您需要静态分析包的函数声明,您可以使用 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)
}

这种方法将为您提供函数声明列表,尽管它们不可调用。要执行这些函数,您需要创建一个单独的文件并单独调用它们。

以上是如何以编程方式列出 Go 包中的公共方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn