有效字段的 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="{{.}}" {{with $.MyStruct.MyField}} {{if eq .Value $e}}selected="selected"{{end}} {{end}}>{{.}}</option> {{end}} </select>
with 操作将点设置为提供的值,从而允许访问其字段。在本例中,with 操作用于提供对内部作用域内 $.MyStruct.MyField 字段的访问,在内部作用域中执行比较。
以上是如何在不短路的情况下测试Golang模板中的有效字段?的详细内容。更多信息请关注PHP中文网其他相关文章!