为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
一只甜甜圈 2022-09-26 14:53:10
所以这个问题似乎以前被问过几次,但之前的答案都不适合我,我从错误到错误再到没有结果。因此,由于我肯定错过了一些我没有看到的东西,因此我希望得到一些帮助: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)有没有人知道我做错了什么?编辑我用樱桃丽梦的答案更新了代码,这里是游乐场:游乐场目前,该游乐场只是忽略错误并执行模板,即使传递的配置为空并且模板中没有或条件。
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

解析文件方法文档说:

由于 ParseFiles 创建的模板由参数文件的基名称命名,因此 t 通常应具有文件(基本)名称之一的名称。

使用文件路径。基数 以获取文件的基名称。使用该名称作为模板的名称:

 t, err := template.New(filepath.Base(f)).Option("missingkey=error").ParseFiles(f)

在操场上运行一个示例


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 53 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信