How to List the Public Methods of a Package in Go
Question:
How can I list all the public methods available in a specific package in Go?
Problem:
Consider the following project structure:
main.go:
package main func main() { // List all public methods here. }
libs/method.go:
package libs func Result1() { fmt.Println("Method Result1") } func Result2() { fmt.Println("Method Result2") }
Answer:
While it may seem straightforward to list public methods using reflection, it is unfortunately not directly possible in Go. This is because the compiler optimizes unused functions and removes them from the final executable.
Alternative Approach:
If you need to analyze the package's function declarations statically, you can use the go/parser package:
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) }
This approach will provide you with a list of function declarations, although they are not invokable. To execute these functions, you would need to create a separate file and call them individually.
The above is the detailed content of How Can I Programmatically List Public Methods in a Go Package?. For more information, please follow other related articles on the PHP Chinese website!