首頁 >後端開發 >Golang >如何在不短路的情況下測試Golang模板中的有效字段?

如何在不短路的情況下測試Golang模板中的有效字段?

DDD
DDD原創
2024-10-26 05:34:31591瀏覽

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

有效欄位的Golang 範本測試

問題:

當嘗試測試使用and late函數在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