Wie vergleiche ich Werte aus „sql.Null[Type]'-Feldern in Go-Vorlagen sicher?

Patricia Arquette
Freigeben: 2024-10-28 05:36:30
Original
472 Leute haben es durchsucht

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

Testen auf gültige Felder in Go-Vorlagen

Im Datenbank-/SQL-Paket von Go erleichtern Null[Type]-Strukturen die Zuordnung von Datenbankwerten zum Code null Unterstützung. Das Testen der Nullität eines Felds (d. h. wenn seine Valid-Eigenschaft falsch ist) stellt jedoch einige Herausforderungen dar.

Der empfohlene Ansatz zum Anzeigen eines SQL-Felds ist die Verwendung der .Value-Eigenschaft, wie zum Beispiel:

{{ .MyStruct.MyField.Value }}
Nach dem Login kopieren

Bei komplexeren Szenarien mit Wertvergleichen kann der Ansatz fehlschlagen, wenn .MyField nicht gültig ist, was zu einem Fehler „Ungültiger Typ für Vergleich“ führt. Zunächst scheint es eine unkomplizierte Lösung zu sein, vor dem Vergleich zu testen, ob .MyField Null ist. Diese Methode schlägt jedoch mit dem gleichen Fehler fehl.

Die Funktion „and“ in Go-Vorlagen sollte in der Lage sein, solche Situationen zu bewältigen. In früheren Go-Versionen (< 1.18) erfolgt jedoch keine Kurzschlussauswertung, und es werden immer alle seine Argumente ausgewertet. Selbst wenn die Bedingung also als falsch ausgewertet würde, wenn $.MyStruct.MyField Null ist, gilt die Gleichung $.MyStruct.MyField.Value . Der Ausdruck wird immer noch ausgewertet, was den Fehler auslöst.

Um dieses Problem zu beheben, können Sie mehrere {{if}}-Aktionen verwenden:

{{if $.MyStruct.MyField}}
    {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}}
{{end}}
Nach dem Login kopieren

Alternativ können Sie die {{with} verwenden }-Aktion, obwohl sie den Punkt setzt und Vorsicht erfordert:

<select name="y">
   {{range $idx, $e := .SomeSlice}}
       <option value="{{.}}&quot; {{with $.MyStruct.MyField}}
               {{if eq .Value $e}}selected="selected"{{end}}
           {{end}}>{{.}}</option>
   {{end}}
</select></p>
<p>Da es sich bei sql.NullXX-Typen außerdem um Strukturwerte handelt, die nicht Null sein dürfen, ist die Überprüfung ihres Valid-Felds wichtig, um festzustellen, ob es sich um ihre Value()-Methode handelt gibt einen Wert ungleich Null zurück:</p>
<pre class="brush:php;toolbar:false">{{if $.MyStruct.MyField.Valid}}
    {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}}
{{end}}
Nach dem Login kopieren

Mit diesen Techniken können Sie effektiv die Existenz gültiger Felder testen und deren Werte in Go-Vorlagen vergleichen.

Das obige ist der detaillierte Inhalt vonWie vergleiche ich Werte aus „sql.Null[Type]'-Feldern in Go-Vorlagen sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!