Comment définir plusieurs balises de nom dans une structure


137

J'ai besoin d'obtenir un élément d'une base de données mongo, j'ai donc défini une structure comme celle-ci

type Page struct {
    PageId string                 `bson:"pageId"`
    Meta   map[string]interface{} `bson:"meta"`
}

Maintenant, je dois également l'encoder en JSON, mais il encode les champs en majuscules (j'obtiens PageId au lieu de pageId), donc j'ai également besoin de définir des balises de champ pour JSON. J'ai essayé quelque chose comme ça mais ça n'a pas fonctionné:

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

Alors, comment cela peut-il être fait, définir plusieurs balises de nom dans une structure?

Réponses:


239

Il dit dans la documentation du reflectpaquet:

Par convention, les chaînes de balises sont une concaténation de paires clé: "valeur", éventuellement séparées par des espaces. Chaque clé est une chaîne non vide composée de caractères sans contrôle autres que l'espace (U + 0020 ''), les guillemets (U + 0022 '"') et les deux points (U + 003A ':'). Chaque valeur est entre guillemets en utilisant les caractères U + 0022 '"' et la syntaxe littérale de chaîne Go.

Ce que vous devez faire est d'utiliser un espace au lieu de la virgule comme séparateur de chaîne de balise.

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}

5
Assurez-vous également qu'il n'est séparé que par un espace et non par une tabulation. cf. stackoverflow.com/questions/20215510/…
GreenRaccoon23

68

Merci pour la réponse acceptée.

Ci-dessous, c'est juste pour les paresseux comme moi.

INCORRECT

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

CORRECT

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.