使用ast来获取函数中的所有函数调用

时间:2017-09-08 11:20:14

标签: go abstract-syntax-tree

我正在尝试使用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(从gogland的评估得到它)来获取被调用函数的名称。

1 个答案:

答案 0 :(得分:1)

好的,我发现你必须进行大量的演员才能真正提取数据。

以下是如何在func中提取func调用的示例。

protected $except=[
                    '1st route',
                    '2nd route',
                    .
                    .
                  ];

我也找到了这方面的帮助,找出你需要把它投射到什么。 http://goast.yuroyoro.net/