所以这个问题似乎以前被问过几次,但之前的答案都不适合我,我从错误到错误再到没有结果。
因此,由于我肯定错过了一些我没有看到的东西,因此我希望得到一些帮助:
res, err := os.Create(strings.Replace(f, ".tmpl", "", -1))
if err != nil {
log.Fatal(err)
}
t, err := template.ParseFiles(f)
if err != nil {
log.Fatal(err)
}
removes = append(removes, res.Name())
config := make(map[string]string)
for _, v := range vars {
config[v] = os.Getenv(v)
}
err = t.Execute(res, config)
if err != nil {
log.Fatal(err)
}
res.Close()
因此,为了解释我正在做什么,我将一个字符串传递给具有yaml.tmpl扩展名的文件(路径/文件)。结果文件应该是 yaml,因此我删除了最后一个部分以生成结果文件名。
然后,我使用go模板解析文件,然后使用我生成的配置映射执行。
这像这样工作正常,但我想补充一点:让我生成一个错误,以防我没有从配置映射到模板中的变量提供值。.Option("missingkey=error")
所以我试图在模板解析文件中添加选项,如下所示:
t, err := template.New("test").Option("missingkey=error").ParseFiles(f)
但是我不能使用模板执行,必须使用模板执行模板,但对于我得到的那些:或template: no template "test" associated with template "test"template: test: "test" is an incomplete or empty template
在极少数情况下,我不会收到错误,它只是忽略该选项,例如如果我这样做:
err = t.Option("missingkey=error").Execute(res, config)
有没有人知道我做错了什么?
编辑
我用樱桃丽梦的答案更新了代码,这里是游乐场:游乐场
目前,该游乐场只是忽略错误并执行模板,即使传递的配置为空并且模板中没有或条件。
慕田峪9158850
相关分类