tl; dr: Verwenden Sie ,omitempty
, und wenn Sie benötigen, um den Unterschied zwischen einem zero value und null/keine Angabe, do what the GitHub API does and use a pointer kümmern.
Sowohl json
und bson
unterstützen die ,omitempty
-Tag. Für json, "leere Werte sind falsch, 0, irgendein Nullzeiger oder Schnittstellenwert und jedes Array, Scheibe, Karte, oder Zeichenkette der Länge Null"(). Für bson bedeutet ,omitempty
"Fügen Sie das Feld nur ein, wenn es nicht auf den Nullwert für den Typ oder auf leere Slices oder Maps gesetzt ist" und zero values enthält leere Strings und Nullzeiger (bson docs).
Wenn Sie also wirklich eine Gruppenstruktur benötigen, können Sie stattdessen eine *Group
einfügen, und sie wird nicht gespeichert, wenn der Zeiger Null ist. Wenn Investment
nur die Gruppe Name der Gruppe halten muss, ist es noch einfacher: ""
als Gruppenname hält einen Gruppenschlüssel gespeichert.
bson
verwendet standardmäßig bereits den niedrigeren Feldnamen, so dass Sie diese aus dem struct-Tag auslassen können, wenn sie übereinstimmen. json
wird standardmäßig auf den Großbuchstaben-Namen gesetzt. Geben Sie daher den Kleinbuchstaben-Namen in einem Tag an, wenn Sie Kleinbuchstaben benötigen.
Also, am besten Fall, vielleicht können Sie nur verwenden:
type Investment struct {
Base
Symbol string `json:"symbol" binding:"required"`
Group string `json:"group,omitempty" bson:",omitempty"`
Fields bson.M `json:"fields"`
}
Wenn Sie jemals in Felder laufen, wo der Nullwert für den Typ („“, 0, falsch, etc.) unterscheidet sich von " nicht angegeben ", können Sie do what the GitHub API does and put pointers in your structures - im Wesentlichen eine Erweiterung des *Group
Trick.
Dies ist nicht mein Fachgebiet, aber Sie können untersuchen, 'json.Marshaler' http://golang.org/pkg/encoding/json/#Marshaler es können Sie benutzerdefinierte Marshalling Verhalten für Json definieren, was sollte (mit etwas Aufwand) können Sie ein gegebenes Feld basierend auf einer Logik nicht schreiben. – LinearZoetrope
Struct tags: 'json:" omitemperty "' sollte den Trick aus dem Speicher tun. – elithrar