我正在使用go:generate来处理自动生成一些数据库模型的过程,我希望通过gofmt
运行我的go模板,但是它与所有其他{{ ... }}
动态节有关。
我缺少明显的东西吗?我希望这是gofmt
人们解决的一个用例,因为gofmt
和go 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)。