Hypothetisch, ich führe eine API aus und wenn ein Benutzer eine GET-Anfrage für die Benutzerressource abgibt, werde ich relevante Felder als JSON zurückgeben
%Vor% Wie Sie sehen können, hat das Secret-Feld in User json:"-"
. Dies bedeutet, dass ich in den meisten Fällen nicht zurückkehren möchte. In diesem Fall wäre eine Antwort
Das Feldgeheimnis wird nicht zurückgegeben, da json:"-"
das Feld auslässt.
Jetzt öffne ich eine Admin-Route, auf der ich das geheime Feld zurückgeben möchte. Das würde jedoch bedeuten, die User-Struktur zu duplizieren.
Meine aktuelle Lösung sieht so aus:
%Vor%Gibt es eine Möglichkeit, Benutzer in adminUser einzubetten? Ein bisschen wie Vererbung:
%Vor%Das obige funktioniert derzeit nicht, da in diesem Fall nur das Feldgeheimnis zurückgegeben wird.
Hinweis: In der eigentlichen Codebasis gibt es einige Dutzend Felder. Daher sind die Kosten für das Duplizieren von Code hoch.
Die eigentliche Mongo-Abfrage ist unten:
%Vor%Sie sollten sich das Inline-Flag des bson-Pakets ansehen (Das ist dokumentiert unter bson.Marshal ). Es sollte Ihnen erlauben, so etwas zu tun:
%Vor% Sie werden jedoch feststellen, dass Sie doppelte Schlüsselfehler erhalten
wenn Sie versuchen, mit dieser Struktur aus der Datenbank zu lesen,
da sowohl adminUser
als auch User
den Schlüssel secret
enthalten.
In Ihrem Fall würde ich das Secret
-Feld von User
entfernen
und nur die in adminUser
haben.
Dann, wann immer Sie in das Feld secret
schreiben müssen,
stelle sicher, dass du adminUser
benutzt.
Eine andere Alternative wäre, eine Schnittstelle zu deklarieren.
%Vor%Stellen Sie sicher, dass Ihr Modell es implementiert:
%Vor%Und rufe es nur an, je nachdem welche Route aufgerufen wird.
%Vor%Bearbeiten: Der Grund für die Verwendung einer Schnittstelle ist hier der Fall, dass Sie beliebige Modelle über die Leitung mit einer gemeinsamen Methode senden können.