Rumah > Artikel > pembangunan bahagian belakang > Mengapa Go Parser Tidak Dapat Mengesan Komen pada Struktur Jenis?
Apabila cuba mengekstrak komen dokumentasi yang dikaitkan dengan jenis struct menggunakan parser Go dan pakej ast, komen untuk struktur jenis itu sendiri tidak ditemui. Komen untuk fungsi dan medan ada, tetapi dokumentasi untuk jenis bernama FirstType dan SecondType tiada.
Isu timbul kerana kelakuan penghuraian lalai penghurai Go tidak kaitkan ulasan dokumentasi dengan nod TypeSpec dalam Pokok Sintaks Abstrak (AST). Apabila menemui TypeSpec, penghurai menggunakan mana-mana nod ulasan Doc yang ada dan mengalih keluarnya daripada AST.
Menghuraikan ulasan dengan AST tulen
for _, f := range d { ast.Inspect(f, func(n ast.Node) bool { switch x := n.(type) { case *ast.FuncDecl: fmt.Printf("%s:\tFuncDecl %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc.Text()) case *ast.TypeSpec: fmt.Printf("%s:\tTypeSpec %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc.Text()) case *ast.Field: fmt.Printf("%s:\tField %s\t%s\n", fset.Position(n.Pos()), x.Names, x.Doc.Text()) case *ast.GenDecl: fmt.Printf("%s:\tGenDecl %s\n", fset.Position(n.Pos()), x.Doc.Text()) } return true }) }
Tambah kes untuk ast.GenDecl kepada fungsi pemeriksaan AST. Ini akan menyemak ulasan dokumentasi yang dikaitkan dengan nod GenDecl, di mana ulasan untuk definisi jenis disimpan dalam kes khas di mana definisi jenis ialah penguncupan beberapa definisi individu.
Walau bagaimanapun, pendekatan ini tidak memuaskan kerana ulasan dokumentasi tidak dilampirkan pada nod TypeSpec yang sepadan dalam AST.
Penyelesaian Pilihan: Gunakan go/doc
import ( "go/doc" ) func main() { d, err := doc.ParseDir("./", nil, doc.AllDecls) if err != nil { fmt.Println(err) return } for _, info := range d { ast.Inspect(info.Decl, func(n ast.Node) bool { switch x := n.(type) { // ... inspecting cases for functions, fields, etc. case *ast.TypeSpec: fmt.Printf("%s:\tTypeSpec %s\t%s\n", fset.Position(n.Pos()), x.Name, info.Doc) } return true }) } }
Menggunakan go/doc menyediakan cara yang standard dan komprehensif untuk menghuraikan dan mendapatkan semula ulasan dokumentasi untuk semua jenis, termasuk jenis struct. Ia mengendalikan kes di mana ulasan dokumentasi dilampirkan pada nod GenDecl dan memastikan perkaitan komen yang betul dengan nod yang sepadan dalam AST.
Atas ialah kandungan terperinci Mengapa Go Parser Tidak Dapat Mengesan Komen pada Struktur Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!