我正在使用go:generate来处理自动生成一些数据库模型,我希望通过gofmt
运行我的go模板,但它会与所有额外的{{ ... }}
动态部分一起窒息。
我错过了一些明显的东西吗?我希望这是gofmt
人已经解决的用例,因为gofmt
和go generate
都是go工具链的重要部分。
显然,它只能在go fmt
之后运行go generate
,但是如果格式化的模板质量很差,那么99%的代码就会变得很脏。
答案 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模板工具方面没什么价值。