Maison > développement back-end > Golang > Pourquoi l'erreur « Impossible d'utiliser la chaîne de type comme sql.NullString » se produit-elle dans la bibliothèque GORM de Go, et comment peut-elle être résolue ?

Pourquoi l'erreur « Impossible d'utiliser la chaîne de type comme sql.NullString » se produit-elle dans la bibliothèque GORM de Go, et comment peut-elle être résolue ?

Linda Hamilton
Libérer: 2024-11-06 15:43:02
original
555 Les gens l'ont consulté

Why does the error

Comprendre l'erreur « Impossible d'utiliser la chaîne de type comme sql.NullString »

Dans Go, gorm.Model fournit des fonctionnalités pour travailler avec bases de données utilisant SQL. Lors de la création de modèles de base de données à l'aide de GORM, les types de données doivent être déclarés de manière appropriée pour correspondre à leurs types de données SQL correspondants. L'erreur « Impossible d'utiliser la chaîne de type comme sql.NullString » se produit lorsque vous tentez d'attribuer une valeur de chaîne à un champ qui a été déclaré comme sql.NullString.

sql.NullString : A Struct, Not a String

Le type sql.NullString n'est pas un type de chaîne en lui-même, mais plutôt une structure. Il comprend deux champs : String (la valeur réelle de la chaîne) et Valid (un booléen indiquant si la valeur de la chaîne est valide ou NULL).

Initialiser correctement sql.NullString

Pour initialiser correctement une valeur sql.NullString, fournissez une structure sql.NullString avec les champs String et Valid définis de manière appropriée. Par exemple :

<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

Alternative : définir un type de chaîne nullable

Alternativement, vous pouvez définir un type de chaîne nullable personnalisé, en implémentant le sql.Scanner et le pilote. Interfaces d'évaluation. En exploitant l'octet nul, vous pouvez signaler des valeurs NULL.

<code class="go">type MyString string

const MyStringNull MyString = "\x00"

// Implement driver.Valuer to convert to database value
func (s MyString) Value() (driver.Value, error) {
    if s == MyStringNull {
        return nil, nil
    }
    return []byte(s), nil
}

// Implement sql.Scanner to convert from database value
func (s *MyString) Scan(src interface{}) error {
    // Handle different types
    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 cette approche, vous pouvez utiliser votre type de chaîne nullable personnalisé comme suit :

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

Remarque : Une conversion explicite peut être requise lors de l'attribution de valeurs de chaîne saisies au type de chaîne nullable personnalisé.

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