Go模板缺少键选项始终返回错误

所以这个问题似乎以前被问过几次,但之前的答案都不适合我,我从错误到错误再到没有结果。


因此,由于我肯定错过了一些我没有看到的东西,因此我希望得到一些帮助:


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)

有没有人知道我做错了什么?


编辑


我用樱桃丽梦的答案更新了代码,这里是游乐场:游乐场


目前,该游乐场只是忽略错误并执行模板,即使传递的配置为空并且模板中没有或条件。


一只甜甜圈
浏览 55回答 1
1回答

慕田峪9158850

解析文件方法文档说:由于 ParseFiles 创建的模板由参数文件的基名称命名,因此 t 通常应具有文件(基本)名称之一的名称。使用文件路径。基数 以获取文件的基名称。使用该名称作为模板的名称: t, err := template.New(filepath.Base(f)).Option("missingkey=error").ParseFiles(f)在操场上运行一个示例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go