Go text/template模板:如何在模板内检查值是否在数组中?
Go模板中动态定义检查集合实现值存在性判断
问题场景
- 输入JSON数据:
{ "Fruit": "apple" } - 核心需求:判断
Fruit字段的值是否属于某个指定字符串集合(例如["pear", "banana", "grape"]),并根据判断结果执行对应逻辑
尝试方案及问题
自定义了containsVal函数(接收单个字符串和字符串切片作为参数),尝试在模板中直接编写如下代码:
{{ if containsVal .Fruit []string{"banana", "grape", "etc"} }}do stuff{{ end }}
但Go的text/template不支持直接在模板中使用字符串切片字面量,导致模板编译失败。
现有可行但不符合需求的方案
- 预先定义包含检查集合的结构体,通过
.Execute()方法将结构体传入模板 - 在
containsVal函数内部硬编码检查集合的值
以上两种方案都无法满足检查集合动态定义在模板内部的需求——希望其他人可以直接修改模板文本就能更换检查项(比如换成["fig", "cherry"]),无需改动Go代码。查阅官方文档后未找到直接实现该需求的方法,目前仅能实现简单的字符串相等判断。
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

