私はすべての関数呼び出しをastを使用して関数にリストしようとしています。しかし、どのように使用されるべきかを理解することができない。私はこれまでこれを得ることができました。astを使用して関数内のすべての関数呼び出しを取得する
set := token.NewFileSet()
packs, err := parser.ParseFile(set, serviceFile, nil, 0)
if err != nil {
fmt.Println("Failed to parse package:", err)
os.Exit(1)
}
funcs := []*ast.FuncDecl{}
for _, d := range packs.Decls {
if fn, isFn := d.(*ast.FuncDecl); isFn {
funcs = append(funcs, fn)
}
}
私はfuncsを検査しました。私はfuncs[n1].Body.List[n2]
に行く。 しかし、これの後に私はどのように私はdata.X.Fun.data.Sel.name
(ゴーグランドの評価から得た)の下層を読み取ると仮定していると呼ばれている関数の名前を取得することはできません。
go/astパッケージの使い方を理解しようとすると、[print](https://godoc.org/go/ast#Print)のツリーの例が役立ちます。関数呼び出しを変換から区別する必要がある場合は、go/typesを使用する方が簡単です。 –
検査する目的の関数を記述し、https://golang.org/pkg/go/ast/#Printに似たコードを記述し、コードを読み込んで検査します(直接func.Bodyノードを渡します)。 +/- https://gist.github.com/mh-cbon/3ed5d9c39e9635cfed0f896000098133これは多くのastとの協力に役立ちます。 –