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
DDDoriginal
2024-12-31 01:52:09229parcourir

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
}

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!

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