如何在 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中文网其他相关文章!