首頁  >  文章  >  後端開發  >  如何安全地比較 Go 範本中「sql.Null[Type]」欄位的值?

如何安全地比較 Go 範本中「sql.Null[Type]」欄位的值?

Patricia Arquette
Patricia Arquette原創
2024-10-28 05:36:30464瀏覽

How to  Safely Compare Values from  `sql.Null[Type]` Fields in Go Templates?

Go 範本中的有效欄位測試

在Go 的database/sql 套件中,Null[Type] 結構有助於將資料庫值映射到代碼空支援。然而,測試字段的無效性(即,當其 Valid 屬性為 false 時)會帶來一些挑戰。

顯示SQL 欄位的建議方法是透過.Value 屬性,例如:

{{ .MyStruct.MyField.Value }}

對於涉及值比較的更複雜場景,如果.MyField 無效,該方法可能會失敗,從而導致“比較類型無效”錯誤。最初,在進行比較之前測試 .MyField 是否為零似乎是一個簡單的解決方案。然而,這個方法失敗並出現同樣的錯誤。

Go 範本中的 and 函數應該能夠處理這種情況。然而,在早期的 Go 版本(

要解決此問題,您可以使用多個{{if}} 操作:

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

或者,您可以使用{{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>

此外,由於sql.NullXX 類型是不能為nil 的結構體值,因此檢查其Valid 欄位對於確定其Value() 方法是否有效至關重要將傳回非零值:

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

這些技術可讓您有效地測試有效欄位是否存在並比較它們在Go 範本中的值。

以上是如何安全地比較 Go 範本中「sql.Null[Type]」欄位的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn