Go模板中不区分大小写的字符串比较

Case insensitive string compare in Go template

Go 模板提供了一个 eq 比较运算符,例如 {{if eq .Var "val" }}

在这种情况下进行不区分大小写的字符串比较的最佳方法是什么?因此,对于 Var 为 "val"、"Val" 或 "VAL".

的上述情况是正确的

您可以简单地创建另一个 lowercase 变量 s1 := strings.ToLower(s) 并将其与您的模板中的小写字符串进行比较。

您可以使用 template.Funcs() 注册要在模板中使用的自定义函数。

有一个 strings.EqualFold() 函数可以执行不区分大小写的字符串比较。所以只需注册该函数,您就可以从模板中调用它:

t := template.Must(template.New("").Funcs(template.FuncMap{
    "MyEq": strings.EqualFold,
}).Parse(`"{{.}}" {{if MyEq . "val"}}matches{{else}}doesn't match{{end}} "val".`))

t.Execute(os.Stdout, "Val")
fmt.Println()
t.Execute(os.Stdout, "NotVal")

结果:

"Val" matches "val".
"NotVal" doesn't match "val".

Go Playground 上试用。