Distinguer les champs JSON définis sur Null et non présents lors du démarshalage
Lors du démarshalage de JSON dans une structure Golang, différenciation entre les champs définis sur null et les champs qui ne sont pas présents peuvent être cruciaux. Les deux scénarios aboutissent à des valeurs nulles dans la structure, obscurcissant la sémantique prévue.
Différenciation à l'aide de génériques (Go 1.18)
Go 1.18 introduit des génériques, permettant une solution concise avec un seul type générique :
type Optional[T any] struct { Defined bool Value *T }
Ce type encapsule le concept d'une valeur facultative avec un état de champ défini (Défini).
Exemple d'utilisation :
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[int] `json:"field2"` }
Après le démarshaling, les champs avec des valeurs définies (Défini == true) peut faire la distinction entre les valeurs nulles (Value == nil) et les valeurs manquantes (Defined == false).
Solutions pré-génériques
Wrapper de type personnalisé :
type OptionalString struct { Defined bool Value *string } func (os *OptionalString) UnmarshalJSON(data []byte) error { os.Defined = true return json.Unmarshal(data, &os.Value) }
Exemple Utilisation :
type Payload struct { Field1 string `json:"field1"` Field2 OptionalString `json:"field2"` }
Limitations :
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!