我使用go/parser来解析 golang 文件并检查它的 AST。我有一个特定的问题,我想使用 go/parser 但我遇到了障碍。
考虑以下文件存在于 GOPATH/src 中
$GOPATH/src/
example.go
example_package/
example_package.go
以下是上述文件的内容
例子.go
package main
import (
"example_package"
)
type MyObject struct {
base *example_package.BaseObject
}
func DoMyThing(arg *example_package.FirstArg) {
arg.Write(10)
}
func DoMyAnotherThing() {
}
func main() {
example_package.GetItStarted(&MyObject{})
}
example_package.go
package example_package
func GetItStarted(obj interface{}) {
}
type FirstArg interface {
Read() int
Write(x int)
}
type BaseObject struct {
}
func (p *BaseObject) DoSomething(arg *FirstArg, a int) {
arg.Write(arg.Read() + a)
}
我的意图是编写一个名为gen_structure这样使用的 go 程序
$ gen_structure example.go
输出将是
> MyObject
- DoMyThing(arg)
- base
- DoSomething(arg, a)
gen_structure 做了什么?
它解析 example.go 和
example_package.GetItStarted(&MyObject{})
从 main() 函数内部的行中提取“MyObject” 。
查找MyObject
至少有一个参数且第一个参数为 type 的方法*package_example.FirstArg
。它找到DoMyThing
(并忽略DoMyAnotherThing
)。
标识成员base
并查看内部(通过打开example_package
)。
应用与上述相同的过程来查找方法并查找 DoSomething
使用收集的信息,它打印所需的输出。
我知道我可以使用go/parser
. 但是,我无法弄清楚如何跨包解析符号(在本例中为example_package
)。
我该怎么做呢?
万千封印
相关分类