Go 模板 missingkey 选项总是 return 错误
Go template missingkey option always return error
所以这个问题之前似乎已经被问过几次了,但是 none 之前的答案对我有用,我从错误到错误再到没有结果。
所以我肯定遗漏了一些我没有看到的东西,我想得到一些帮助:
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 的文件 (path/file)。结果文件应该是 yaml 所以我删除了最后一部分以生成结果文件名。
然后我用 go 模板解析文件,然后用我生成的 configmap 执行。
这样工作正常,但我想添加:.Option("missingkey=error")
让它生成一个错误,以防我没有将 configmap 中的值赋给模板中的变量。
所以我尝试像这样在模板解析文件中添加选项:
t, err := template.New("test").Option("missingkey=error").ParseFiles(f)
但是我不能使用模板 Exectute 并且必须使用模板 ExecuteTemplate 但是我得到的是:
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)
有人知道我做错了什么吗?
编辑
我用 Cerise Limon 的回答更新了代码,这里是 playground:playground
目前 playground 只是忽略错误并执行模板,即使传递的配置为空并且模板中没有 or 条件也是如此。
ParseFiles method 文档说:
Since the templates created by ParseFiles are named by the base names of the argument files, t should usually have the name of one of the (base) names of the files.
使用filepath.Base获取文件的基本名称。使用该名称作为模板的名称:
t, err := template.New(filepath.Base(f)).Option("missingkey=error").ParseFiles(f)
所以这个问题之前似乎已经被问过几次了,但是 none 之前的答案对我有用,我从错误到错误再到没有结果。
所以我肯定遗漏了一些我没有看到的东西,我想得到一些帮助:
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 的文件 (path/file)。结果文件应该是 yaml 所以我删除了最后一部分以生成结果文件名。
然后我用 go 模板解析文件,然后用我生成的 configmap 执行。
这样工作正常,但我想添加:.Option("missingkey=error")
让它生成一个错误,以防我没有将 configmap 中的值赋给模板中的变量。
所以我尝试像这样在模板解析文件中添加选项:
t, err := template.New("test").Option("missingkey=error").ParseFiles(f)
但是我不能使用模板 Exectute 并且必须使用模板 ExecuteTemplate 但是我得到的是:
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)
有人知道我做错了什么吗?
编辑
我用 Cerise Limon 的回答更新了代码,这里是 playground:playground
目前 playground 只是忽略错误并执行模板,即使传递的配置为空并且模板中没有 or 条件也是如此。
ParseFiles method 文档说:
Since the templates created by ParseFiles are named by the base names of the argument files, t should usually have the name of one of the (base) names of the files.
使用filepath.Base获取文件的基本名称。使用该名称作为模板的名称:
t, err := template.New(filepath.Base(f)).Option("missingkey=error").ParseFiles(f)