如何在Go 中列出包裝的公共方法
問題:
問題:如何我可以列出特定包中可用的所有公共方法嗎?
問題:考慮以下項目結構:
package main func main() { // List all public methods here. }
package libs func Result1() { fmt.Println("Method Result1") } func Result2() { fmt.Println("Method Result2") }
答案:
同時使用反射列出公共方法似乎很簡單,但不幸的是在Go 中不能直接實作。這是因為編譯器優化了未使用的函數並將它們從最終的可執行檔中刪除。
替代方法: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/parser 套件:這種方法將為您提供函數聲明列表,儘管它們無法呼叫。要執行這些函數,您需要建立一個單獨的檔案並單獨呼叫它們。
以上是如何以程式設計方式列出 Go 套件中的公共方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!