Cara Menyenaraikan Kaedah Awam Pakej dalam Go
Soalan:
Bagaimana bolehkah saya menyenaraikan semua kaedah awam yang terdapat dalam pakej tertentu dalam Pergi?
Masalah:
Pertimbangkan projek berikut struktur:
utama.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") }
Jawapan:
Sementara ia mungkin kelihatan mudah untuk menyenaraikan kaedah awam menggunakan refleksi, malangnya ia tidak boleh dilakukan secara langsung dalam Go. Ini kerana pengkompil mengoptimumkan fungsi yang tidak digunakan dan mengalih keluarnya daripada boleh laku akhir.
Pendekatan Alternatif:
Jika anda perlu menganalisis pengisytiharan fungsi pakej secara statik, anda boleh gunakan pakej 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) }
Pendekatan ini akan memberikan anda senarai pengisytiharan fungsi, walaupun ia tidak boleh dilafazkan. Untuk melaksanakan fungsi ini, anda perlu mencipta fail berasingan dan memanggilnya secara individu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyenaraikan Kaedah Awam Secara Program dalam Pakej Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!