使用包go/parser读取go源代码的AST以获得接口';s方法&x2B;它们的参数和返回类型

使用包go/parser读取go源代码的AST以获得接口';s方法&x2B;它们的参数和返回类型,go,metaprogramming,abstract-syntax-tree,Go,Metaprogramming,Abstract Syntax Tree,例如,我有这个界面: 类型GenericServer接口{ Echo(context.context,*消息)(*消息,错误) } 我只想得到: Echo(context.Context, *Message) (*Message, error) 我可以使用此问题的答案找到接口和方法名称: 使用spew并没有太大帮助,因为我得到了一个3600行转储,我无法理解 如果可能的话,我更愿意坚持导入“go/ast”、“go/parser”、“go/token”和“go/types”,而不是读取源文件

例如,我有这个界面:

类型GenericServer接口{
Echo(context.context,*消息)(*消息,错误)
} 
我只想得到:

Echo(context.Context, *Message) (*Message, error)
我可以使用此问题的答案找到接口和方法名称:

使用spew并没有太大帮助,因为我得到了一个3600行转储,我无法理解

如果可能的话,我更愿意坚持导入“go/ast”、“go/parser”、“go/token”和“go/types”,而不是读取源文件以使用正则表达式来查找定义(因为我知道接口的预期名称)。另外,除了断言
*ast.GenDecl
或带有
类型接口{}
的字段到
*ast.Field
/
*ast.FuncType
/等所必需的字段之外,我不希望有任何类型的手动反射


对于一些让我能够访问参数和返回类型的结构,我感到非常荣幸。

在检查AST时,请使用而不是spew包。见@CeriseLimón谢谢!我要试试这个now@CeriseLim翁得到了ast.Print的帮助。现在已经足够好了!(警告:边界硬编码)