Champs JSON nuls et champs manquants dans Go : une comparaison
Lorsque vous travaillez avec des données JSON dans Go, il est crucial de distinguer les champs qui sont explicitement définis sur null et les champs qui manquent simplement dans l'entrée JSON. Cette distinction devient nécessaire lorsque les données JSON représentent une structure Golang.
Les champs nuls et manquants donnent des valeurs nulles dans les champs de structure Go correspondants. Cependant, faire la distinction entre les deux scénarios peut être essentiel pour déterminer si un champ a été intentionnellement défini sur null ou n'a pas été inclus dans les données JSON.
Pour relever ce défi, deux approches sont disponibles :
Utilisation de structures facultatives avec des génériques (Go 1.18)
Go 1.18 introduit génériques, permettant la création d’une structure générique facultative pour gérer cette situation. La structure facultative comporte un champ booléen défini indiquant la présence d'une valeur dans l'entrée JSON et un pointeur de valeur vers la valeur réelle.
type Optional[T any] struct { Defined bool Value *T }
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[bool] `json:"field2"` Field3 Optional[int32] `json:"field3"` }
Utilisation de structures facultatives personnalisées (pré-génériques )
Avant les génériques, une structure facultative* personnalisée peut être créée pour chaque type de données qui doit être géré comme facultatif.
type OptionalString struct { Defined bool Value *string }
type Payload struct { SomeField1 string `json:"somefield1"` SomeField2 OptionalString `json:"somefield2"` }
En utilisant ces techniques, les développeurs peuvent facilement discerner si un champ JSON a été explicitement défini sur null ou s'il était absent des données d'entrée, offrant ainsi une plus grande flexibilité et un plus grand contrôle sur la validation des données et traitement.
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!