Mencari Jenis Pakej Secara Dinamik
Walaupun tiada mekanisme penemuan jenis dalam pakej refleksi, kaedah lain wujud untuk menemui jenis yang dieksport, terutamanya struct , pada masa jalan.
Pergi 1.5 dan Kemudian
Dalam Go 1.5 dan ke atas, jenis dan pakej pengimport boleh membantu dalam tugas ini. Coretan kod berikut menunjukkan proses:
package main import ( "fmt" "go/importer" ) func main() { pkg, err := importer.Default().Import("time") if err != nil { fmt.Printf("error: %s\n", err.Error()) return } for _, declName := range pkg.Scope().Names() { fmt.Println(declName) } }
Versi Pra-1.5
Sebelum Pergi 1.5, pakej ast menyediakan satu-satunya pendekatan yang tidak menggodam masalah ini . Dengan menyusun kod sumber, pakej ini boleh mengekstrak maklumat jenis:
package main import ( "fmt" "go/ast" "go/parser" "go/token" ) func main() { fset := token.NewFileSet() node, err := parser.ParseFile(fset, "time.go", nil, parser.ParseComments) if err != nil { fmt.Printf("error: %s\n", err.Error()) return } ast.Inspect(node, func(n ast.Node) bool { if n, ok := n.(*ast.TypeSpec); ok { fmt.Println(n.Name.Name) } return true }) }
Teknik ini membenarkan penemuan jenis yang dieksport, terutamanya struct, dalam menjalankan pakej Go, membolehkan analisis lanjut dan instantiasi kejadian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menemui Jenis Pakej Secara Dinamik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!