2017-09-22 13 views
4

Je voudrais savoir s'il est possible de différencier une valeur de vide et une valeur de champ non spécifiée.Comment reconnaître une valeur nulle et un champ non spécifié lors d'un déstabilisation dans Go?

Voici un exemple:

var jsonBlob = []byte(`[ 
    {"Name": "A", "Description": "Monotremata"}, 
    {"Name": "B"}, 
    {"Name": "C", "Description": ""} 
]`) 

type Category struct { 
    Name string 
    Description string 
} 

var categories []Category 
err := json.Unmarshal(jsonBlob, &categories) 

if err != nil { 
    fmt.Println("error:", err) 
} 
fmt.Printf("%+v", categories) 

Egalement disponible ici: https://play.golang.org/p/NKObQB5j4O

Sortie:

[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}] 

Ainsi, dans cet exemple, est-il possible de différencier la description de la catégorie B de la catégorie C? Je veux juste être capable de les différencier pour avoir un comportement différent dans le programme.

+0

Ni Go ni JSON avoir le concept de "valeurs vides" – Flimzy

Répondre

4

Vous pouvez faire la distinction entre les valeurs vides et manquantes si vous modifiez votre type de champ pour qu'il soit un pointeur. Si la valeur est présente dans JSON avec une valeur de chaîne vide, elle sera définie sur un pointeur qui pointe vers une chaîne vide. S'il n'est pas présent dans JSON, il restera nil.

type Category struct { 
    Name  string 
    Description *string 
} 

sortie (essayez le Go Playground):

[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}] 
+0

qui a été une solution facile! Merci! (peut accepter la réponse en 6min) – kenfire

+0

Voici un autre exemple qui démontre les différences: https://play.golang.org/p/3tU6paM9Do – kenfire