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 上试用。
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 上试用。