Maison  >  Article  >  développement back-end  >  Comment comparer en toute sécurité les valeurs des champs « sql.Null[Type] » dans les modèles Go ?

Comment comparer en toute sécurité les valeurs des champs « sql.Null[Type] » dans les modèles Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 05:36:30464parcourir

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

Test des champs valides dans les modèles Go

Dans le package base de données/sql de Go, les structures Null[Type] facilitent le mappage des valeurs de base de données avec lesquelles coder prise en charge nulle. Cependant, tester la nullité d'un champ (c'est-à-dire lorsque sa propriété Valid est fausse) pose certains défis.

L'approche recommandée pour afficher un champ SQL consiste à utiliser la propriété .Value, telle que :

{{ .MyStruct.MyField.Value }}

Pour les scénarios plus complexes impliquant des comparaisons de valeurs, l'approche peut échouer si .MyField n'est pas valide, ce qui entraîne une erreur « type non valide pour la comparaison ». Au départ, tester si .MyField est nul avant de faire la comparaison semble être une solution simple. Cependant, cette méthode échoue avec la même erreur.

La fonction and dans les modèles Go devrait être capable de gérer de telles situations. Cependant, dans les versions antérieures de Go (< 1.18), le court-circuit n'est pas évalué et tous ses arguments sont toujours évalués. Ainsi, même si la condition était évaluée à false si $.MyStruct.MyField est nul, l'eq $.MyStruct.MyField.Value . l'expression est toujours évaluée, déclenchant l'erreur.

Pour résoudre ce problème, vous pouvez utiliser plusieurs actions {{if}} :

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

Vous pouvez également utiliser le {{with} }, bien qu'elle définisse le point et nécessite de la prudence :

<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>De plus, étant donné que les types sql.NullXX sont des valeurs de structure qui ne peuvent pas être nulles, il est essentiel de vérifier leur champ Valid pour déterminer si leur méthode Value() renverra une valeur non nulle :</p>
<pre class="brush:php;toolbar:false">{{if $.MyStruct.MyField.Valid}}
    {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}}
{{end}}

Ces techniques vous permettent de tester efficacement l'existence de champs valides et de comparer leurs valeurs dans les modèles Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn