是否可以在设计用于go generate的模板上使用gofmt?

时间:2015-12-07 03:43:51

标签: go

我正在使用go:generate来处理自动生成一些数据库模型,我希望通过gofmt运行我的go模板,但它会与所有额外的{{ ... }}动态部分一起窒息。

我错过了一些明显的东西吗?我希望这是gofmt人已经解决的用例,因为gofmtgo generate都是go工具链的重要部分。

显然,它只能在go fmt之后运行go generate,但是如果格式化的模板质量很差,那么99%的代码就会变得很脏。

1 个答案:

答案 0 :(得分:6)

大多数生成工具将模板执行到* bytes.Buffer,使用format.Source格式化缓冲区字节并将结果写入输出文件。

给定模板t和输出编写器w,代码如下所示:

var buf bytes.Buffer
if err := t.Execute(&buf, data); err != nil {
    // handle error
}
p, err := format.Source(buf.Bytes())
if err != nil {
    // handle error
}
w.Write(p)

Gofmting模板并不能确保输出是gofmted。考虑到使用go / format包对输出进行gofmt是多么容易,在创建gofmt模板工具方面没什么价值。