Maison > développement back-end > Golang > Comment gérer les chaînes nullables dans les modèles GORM ?

Comment gérer les chaînes nullables dans les modèles GORM ?

Patricia Arquette
Libérer: 2024-11-06 01:28:02
original
900 Les gens l'ont consulté

How to Handle Nullable Strings in GORM Models?

Impossible d'utiliser le type de chaîne comme sql.NullString

Lors de la création d'un modèle GORM, vous pouvez rencontrer une erreur si vous essayez d'utiliser un type de chaîne pour un champ qui doit être nullable. Le problème survient lors de l'utilisation de sql.NullString pour des champs nullables.

Problème :

L'erreur que vous obtenez, "ne peut pas utiliser" une chaîne va ici ", ( tapez string) en tant que type sql.NullString dans la valeur du champ", indique que vous essayez d'attribuer une chaîne directement à un champ sql.NullString. Cependant, sql.NullString n'est pas un type de chaîne, mais un type de structure conçu pour représenter des chaînes nullables.

Solution :

Pour résoudre ce problème, vous devez initialiser correctement le champ sql.NullString. Il doit être initialisé comme :

<code class="go">db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   sql.NullString{String: "a string goes here", Valid: true},
    Holyday:     false,
})</code>
Copier après la connexion

Solution alternative :

Si vous préférez utiliser une syntaxe simplifiée pour les chaînes nullables, vous pouvez créer votre propre type de chaîne nullable en implémentant les interfaces sql.Scanner et driver.Valuer et exploitant l'octet nul pour signaler une valeur NULL.

<code class="go">type MyString string

const MyStringNull MyString = "\x00"

// implements driver.Valuer, will be invoked automatically when written to the db
func (s MyString) Value() (driver.Value, error) {
    if s == MyStringNull {
        return nil, nil
    }
    return []byte(s), nil
}

// implements sql.Scanner, will be invoked automatically when read from the db
func (s *MyString) Scan(src interface{}) error {
    switch v := src.(type) {
    case string:
        *s = MyString(v)
    case []byte:
        *s = MyString(v)
    case nil:
        *s = MyStringNull
    }
    return nil
}</code>
Copier après la connexion

Avec ce type, vous pouvez initialiser le champ Quelque chose comme suit :

<code class="go">db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   "a string goes here",
    Holyday:     false,
})</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal