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 }}
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}}
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="{{.}}" {{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}}
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!