我正在使用go:generate来处理自动生成一些数据库模型的过程,我希望通过gofmt运行我的go模板,但是它与所有其他{{ ... }}动态节有关。

我缺少明显的东西吗?我希望这是gofmt人们解决的一个用例,因为gofmtgo generate都是go工具链的重要组成部分。

显然,它只在go fmt之后运行go generate即可工作,但是如果格式不正确的模板(占99%的代码)摆在那儿,那感觉就很肮脏。

最佳答案

大多数生成工具将模板执行为* 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模板的工具几乎没有值(value)。

09-18 02:15