Leere oder nicht benötigte struct-Felder in golang
Ich bin etwas neu auf typisierte Sprachen wie Go und versuche zu lernen, die besten Möglichkeiten, um Dinge umzusetzen.
Habe ich zwei Strukturen, stellen Modelle dar, der eingefügt wird, in eine mongodb-Datenbank. Ein struct (Investition) hat die andere struct (Gruppe) als eines seiner Felder.
type Group struct {
Base
Name string `json:"name" bson"name"`
}
type Investment struct {
Base
Symbol string `json:"symbol" bson:"symbol" binding:"required"`
Group Group `json:"group" bson:"group"`
Fields bson.M `json:"fields" bson:"fields"`
}
Das problem das ich habe ist, dass im Investment-Modell, eine Gruppe ist nicht erforderlich. Wenn es keine Gruppe, ich glaube, es ist besser für ihn auch nicht eingefügt werden in die db. Was ist der beste Weg zu handhaben, ein db-Modell, wie dies in Go?
InformationsquelleAutor der Frage msecret | 2014-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
tl;dr: Verwenden Sie
,omitempty
und wenn Sie sich sorgen machen müssen, der Unterschied zwischen einem null Wert und null/nicht angegeben, tun, was die GitHub-API und verwenden Sie einen Zeiger.Beide
json
undbson
Unterstützung der,omitempty
tag. Für json, "leere Werte sind false, 0, alle nil-Zeiger - oder interface-Wert und einem array, slice und map, oder string der Länge null" (json-docs). Für bson,,omitempty
bedeutet "Nur auf dem Feld, wenn es nicht gesetzt wird der null-Wert für den Typ oder leere Scheiben oder Karten", und null-Werte auch leere strings und null-Zeiger (bson-docs).Also, wenn Sie wirklich brauchen, eine Gruppe struct, kannst du eine
*Group
statt, und es wird nicht gespeichert, wenn der Zeiger nil. WennInvestment
muss nur halten Sie die Gruppe Namenist es sogar noch einfacher:""
als name der Gruppe hält eine Gruppe-Taste gespeichert werden.bson
standardmäßig das kleingeschrieben Feld name kann man schon so weglassen, dass aus der struct-tag, wenn Sie übereinstimmen.json
wird standardmäßig die groß-Namen, so geben Sie den Namen in Kleinbuchstaben ein tag, wenn Sie müssen klein geschrieben werden.So, im besten Fall, vielleicht Sie können nur verwenden:
Wenn du jemals in Bereichen, in denen der null-Wert für den Typ ("", 0, false, etc.) ist Verschieden von "nicht angegeben", können Sie tun, was die GitHub-API und setzen Zeiger in Ihre Strukturen--im wesentlichen eine Erweiterung der
*Group
trick.InformationsquelleAutor der Antwort twotwotwo