【问题标题】:How can I validate a template in golang without trying to store? [closed]如何在不尝试存储的情况下验证 golang 中的模板? [关闭]
【发布时间】:2021-07-22 19:20:18
【问题描述】:

假设我正在尝试从数据源读取和存储模板, 但是很少有不好的模板:

例如:一个好的 golang 模板 - "Paid {{.AMOUNT}} to {{.PERSON}}"

vs: 不好 - "Paid {{.AMOUNT}} to {.PERSON"

在存储之前,我想检查它是否是有效的 golang 模板。 无论如何我可以做到,而无需实际尝试渲染它们?

【问题讨论】:

  • 我完全不明白您为什么需要存储它。解析一下,看看有没有报错吧?
  • 你的“坏”模板是有效的。
  • @Flimzy 我正在尝试将模板存储在我的数据库中,以便仅通过提供相关变量的映射来呈现消息。

标签: go go-templates


【解决方案1】:

您可以解析模板的文本以检查其语法是否正确。为此:

func valid(s string) bool {
    _, err := template.New("").Parse(s)
    return err == nil
}

测试它:

fmt.Println(valid(`Paid {{.AMOUNT}} to {{.PERSON}}`))
fmt.Println(valid(`{{`))

哪些输出(在Go Playground 上试试):

true
false

请注意,这当然并不意味着您在尝试执行模板时不会出错。当然,这也取决于您传递给执行的参数。

另请注意,您的第二个模板"Paid {{.AMOUNT}} to {.PERSON" 在语法上是正确的。使用单个花括号 { 不会出错,它会被添加到输出中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多