一尘不染

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

go

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

我是否缺少明显的东西?我希望这是一个用例的gofmt人已经解决,给双方gofmtgo generate是去工具链的突出部分。

显然,它可以在go fmt之后运行,go generate但是格式化不佳的模板(占99%的代码)会让人感到肮脏。


阅读 218

收藏
2020-07-02

共1个答案

一尘不染

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

给定模板t和输出writer 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模板的工具几乎没有价值。

2020-07-02