Maison > développement back-end > Golang > Comment gérer efficacement les valeurs NULL dans JSON et SQL avec Go ?

Comment gérer efficacement les valeurs NULL dans JSON et SQL avec Go ?

DDD
Libérer: 2024-12-31 01:52:09
original
225 Les gens l'ont consulté

How to Handle NULL Values in JSON and SQL Effectively with Go?

Valeurs JSON et NULL dans SQL avec Go

La gestion des valeurs NULL dans les bases de données SQL peut être un défi, en particulier lorsque vous travaillez avec JSON. Dans Go, les types comme Int64 et String ne prennent pas intrinsèquement en charge les valeurs NULL, ce qui nécessite des types de wrapper comme sql.NullInt64 et sql.NullString.

Cependant, lorsque ces types de wrapper sont utilisés dans des structures et JSON est généré à l'aide du package json, le format JSON résultant s'écarte de ce qui est attendu en raison de l'imbrication supplémentaire introduite par la structure du wrapper nature.

Résoudre le problème

Pour surmonter ce problème, une solution viable consiste à créer des types personnalisés qui adhèrent aux interfaces json.Marshaller et json.Unmarshaler. En intégrant le type sql.NullInt64, les avantages des méthodes SQL sont conservés tout en personnalisant simultanément la gestion JSON. Voici un exemple :

type JsonNullInt64 struct {
    sql.NullInt64
}

func (v JsonNullInt64) MarshalJSON() ([]byte, error) {
    if v.Valid {
        return json.Marshal(v.Int64)
    } else {
        return json.Marshal(nil)
    }
}

func (v *JsonNullInt64) UnmarshalJSON(data []byte) error {
    // Unmarshalling into a pointer detects null values
    var x *int64
    if err := json.Unmarshal(data, &x); err != nil {
        return err
    }
    if x != nil {
        v.Valid = true
        v.Int64 = *x
    } else {
        v.Valid = false
    }
    return nil
}
Copier après la connexion

En utilisant le type JsonNullInt64 personnalisé à la place de sql.NullInt64, l'encodage JSON s'aligne sur les attentes.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal