我正在尝试解析包含接口的 go 源文件并找到接口定义的方法/签名。我正在使用 ast 来解析文件。我能够获得一些高级声明,例如 *ast.GenDecl,但我无法进入下一个级别来确定此类型是否为接口及其方法。
这是一个脚手架类型的问题,我试图解决用户定义服务接口和工具将构建服务框架的问题
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
"reflect"
)
func main() {
fset := token.NewFileSet()
f, _ := parser.ParseFile(fset, "/tmp/tmp.go", `package service
type ServiceInterface interface {
Create(NewServiceRequest) (JsonResponse, error)
Delete(DelServiceRequest) (JsonResponse, error)
}`, 0)
for _, v := range f.Decls {
switch t := v.(type) {
case *ast.FuncDecl:
fmt.Println("func ", t.Name.Name)
case *ast.GenDecl:
switch x := t.Specs[0].(type) {
default:
fmt.Println(x, reflect.TypeOf(x))
}
default:
fmt.Printf("skipping %t\n", t)
}
}
}
结果,但我似乎根本找不到有关接口声明内部结构的任何信息。
&{<nil> ServiceInterface 0x8202d8260 <nil>} *ast.TypeSpec
Smart猫小萌
相关分类