go中type相关的对象间的相互关系

golang.org/x/tools/go/packages及其它工具包对于做go语言的静态分析来说非常有用,这些对象间的关系如下图所示。

pacakge层次关系
pacakge层次关系
对象关系
对象关系

可以看到所有的对象都可以由packages.Package引出。这里CC列举一个稍微绕一点的例子:

需求:

现在有了types.Object,想要获取其ast.Node。

方法如下:

*  首先对于types.Object,根据其Pos信息,可以从FSet中获取到符号所在的文件名target_filename
*  对packages.Package的Syntax进行遍历,对遍历对象中的每个ast.File的Name的NamePos,将其配合从FileSet中可以获取到filename。将这个filename和target_filename做比较,如果一致则说明定位到了具体的ast.File
*  调用astutil的PathEnclosingInterval方法,传入types.Object的Pos和上面查到的ast.File,即可获取到对应的ast.Node
本文微信分享二维码


本文由60 X 60整理编写。
如需转载请注明出处并保留文章所有引用的资料来源。
欢迎关注 本心小晴 微博[微博搜索 本心小晴 或扫描下方二维码]。