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

Case insensitive string compare in Go template

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

在这种情况下,进行不区分大小写的字符串比较的最佳方法是什么?因此,对于var为"val"、"val"或"val"的情况,上述情况是正确的。


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


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

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

1
2
3
4
5
6
7
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")

结果:

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

在运动场上试试。