首页  >  文章  >  后端开发  >  如何在不短路的情况下测试Golang模板中的有效字段?

如何在不短路的情况下测试Golang模板中的有效字段?

DDD
DDD原创
2024-10-26 05:34:31481浏览

How to Test for Valid Fields in Golang Templates Without Short-Circuiting?

有效字段的 Golang 模板测试

问题:

当尝试测试使用 and template 函数在 Golang 模板中是否存在有效字段,几种常见的方法都失败了。此行为源于以下事实:与 && 运算符不同,and 不是短路求值,因此在尝试将 nil 字段与值进行比较时会导致“比较类型无效”之类的错误。

解决方案:

由于模板中 和 的非短路评估,必须采取替代方法。以下是可用于此场景的两种方法:

1.嵌套 if 语句:

{{if $.MyStruct.MyField}}
    {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}}
{{end}}

在这种方法中,外部 if 语句检查 $.MyStruct.MyField 是否存在,内部 if 语句检查其 Value 是否等于所需值。这确保了仅当字段不为零时才执行比较。

2. with 操作:

<select name="y">
   {{range $idx, $e := .SomeSlice}}
       <option value="{{.}}&quot; {{with $.MyStruct.MyField}}
               {{if eq .Value $e}}selected="selected"{{end}}
           {{end}}>{{.}}</option>
   {{end}}
</select>

with 操作将点设置为提供的值,从而允许访问其字段。在本例中,with 操作用于提供对内部作用域内 $.MyStruct.MyField 字段的访问,在内部作用域中执行比较。

以上是如何在不短路的情况下测试Golang模板中的有效字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn