Maison  >  Article  >  développement back-end  >  Comment faire la distinction entre les valeurs non définies et vides dans les structures Go ?

Comment faire la distinction entre les valeurs non définies et vides dans les structures Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 12:58:02696parcourir

How to Distinguish Between Unset and Empty Values in Go Structs?

Distinction entre les valeurs non définies et vides dans les structures Go

Dans Go, lors de la définition des structures, vous pouvez rencontrer le besoin de faire la distinction entre les valeurs qui sont intentionnellement non définies et les valeurs sont simplement vides. Cela peut être essentiel pour la persistance de la base de données et garantir un traitement précis des données.

Considérons l'exemple suivant :

<code class="go">type Organisation struct {
    Category string
    Code     string
    Name     string
}</code>

Disons que vous souhaitez déterminer si le champ Catégorie n'a jamais été défini ou a été intentionnellement défini. comme une chaîne vide. L'utilisation de pointeurs pour les champs (par exemple, *string) ne résoudra pas ce problème, car la valeur zéro d'un pointeur est nulle, ce qui ne peut pas faire la distinction entre une valeur non définie et une valeur vide.

Pour résoudre ce problème, vous pouvez utiliser un type personnalisé tel que sql.NullString du package database/sql. Il garde une trace de l'état NULL et vous permet de différencier les scénarios suivants :

  • unset : NullString{String : "", Valid : false}
  • Chaîne vide : NullString{String : "", Valide : true}
  • chaîne non vide : NullString{String : "value", Valide : true}

Pendant l'analyse de la base de données et la liaison des paramètres, le type sql.NullString gère automatiquement l'état NULL.

Par exemple, pour analyser un champ NullString :

<code class="go">err := db.QueryRow("SELECT category FROM organisations WHERE id = ?", id).Scan(&org.Category)</code>

Pour lier une valeur NullString à un paramètre de base de données :

<code class="go">_, err := db.Exec("INSERT INTO organisations (category) VALUES (?)", org.Category)</code>

Cette approche vous permet de faire la distinction entre les valeurs non définies et vides et d'assurer une persistance précise de la base de données.

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