我有兴趣将内容附加到 Go 模板但在模板的某个部分中。由于模板定义了一个结构,每当我尝试在执行模板时附加新内容时,它都会将新内容附加到先前执行的模板内容中:
示例模板:
type Client struct {
Opts *ClientOpts
Schemas *Schemas
Types map[string]Schema
Container *{{.schema.Id}}Client
}
实际输出:
type Client struct {
Opts *ClientOpts
Schemas *Schemas
Types map[string]Schema
Container *abcClient
}
type Client struct {
Opts *ClientOpts
Schemas *Schemas
Types map[string]Schema
Container *xyzClient
}
}
期望的输出:
type Client struct {
Opts *ClientOpts
Schemas *Schemas
Types map[string]Schema
Container *abcClient
Container *xyzClient
}
我当前的 Go 代码如下所示:
func appendToFile(filename string, template *template.Template, schema client.Schema) error {
output, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
if err != nil {
panic(err)
}
defer output.Close()
data := map[string]interface{}{
"schema": schema,
}
err = template.Execute(output, data)
return err
}
我能想到的一种解决方案是每次都对以前的附加内容进行搜索,然后在其中写入新内容。但我不确定如何在 Go 中做到这一点。有人可以为此提供代码片段或建议更好的策略吗?