Go Template中如何判断字符串包含另一字符串或以其结尾
标准库text/template/html/template的内置函数集没有提供判断子串包含、后缀匹配的原生方法,你提到的eq仅支持完整值的相等判断,要实现这类字符串匹配能力,通过FuncMap注入标准库函数是最简便的标准方案。
具体实现
你不需要自己编写字符串匹配逻辑,直接把Go标准库strings包下的现成方法注入模板作用域即可:
import ( "strings" "text/template" ) // 注意:自定义函数注册必须在模板解析操作之前完成,否则函数无法被识别 tpl := template.Must( template.New("demo"). Funcs(template.FuncMap{ "contains": strings.Contains, // 用于判断字符串是否包含指定子串 "hasSuffix": strings.HasSuffix, // 用于判断字符串是否以指定子串为后缀 "hasPrefix": strings.HasPrefix, // 可顺便注入前缀判断方法,按需添加即可 }). Parse(`你的模板内容`), // 替换为实际的模板解析逻辑,比如ParseFiles加载模板文件 )
模板调用示例
注入完成后就可以直接在模板中使用这些函数:
- 判断字符串包含
{{if contains .Username "admin"}} <span>管理员标识</span> {{end}}
- 判断字符串后缀
{{if hasSuffix .FileName ".pdf"}} <a href="{{.FileUrl}}">下载PDF文件</a> {{end}}
如果你使用的是Gin、Echo这类Web框架封装的模板渲染组件,大多已经默认注入了这类常用字符串处理函数,不需要手动注册就可以直接调用。
内容的提问来源于stack exchange,提问作者Jonathan Chen
相关产品推荐
相关产品推荐

