GoLang ast:生成并打印没有位置信息的树

GoLang ast: generating and printing a tree without position information

我正在寻找一种工具,它可以根据给定的输入生成方法存根。我见过 the ast package,但它似乎代表一个已经解析的 AST,它包含有关源文件中所有内容的信息。重要的是,您需要提供来源信息

我正在考虑以编程方式生成源文件,所以我不知道我的 AST 节点将在最终文件中的何处结束。

我在想:

我意识到我可以通过文本生成来完成这一切,但这似乎类型不安全并且更难处理。

考虑 https://github.com/lu4p/astextract 有更好的 AST 可以打印到 go 代码中。

我知道你已经考虑过了,但是在结果字符串上使用 text/templategoimports 实际上是很合理的。它更容易编写,并且可以更好地转换为编写普通的 go 代码。正如您所注意到的,它不是类型安全的(这很好,因为 运行 goimports 稍后会强制执行)。最大的缺点实际上是很难测试(我们最终编写了一组生成的测试和手动编写的测试)。

(编辑:刚刚意识到这是一个多么古老的问题 - 将我的答案留给其他人,因为我相信你现在已经找到了自己解决这个问题的方法)