In Ihrer Anwendung müssen Sie eine Save()-Methode für zwei Modelle, ModelA, implementieren und ModelB. Trotz ihrer Unterschiede teilen sie ein gemeinsames Feld, Guid. Normalerweise wird eine Basisstruktur zur Aufnahme gemeinsamer Felder erstellt und in die einzelnen Modelle eingebettet. Allerdings stellt dieser Ansatz ein Hindernis für ORMs wie beego/orm dar.
Implementieren der Save()-Methode mit einer Schnittstelle
Eine effektive Lösung besteht darin, eine Schnittstelle zu definieren, Speicherbar und implementieren Sie es sowohl in ModelA als auch in ModelB. Dadurch können Sie den Schnittstellentyp zum Aufrufen der Save()-Methode verwenden, unabhängig vom verwendeten Modell. Hier ist ein Beispiel:
type Savable interface { Save() } func (a ModelA) Save() { // Save implementation for ModelA } func (b ModelB) Save() { // Save implementation for ModelB } // Example usage var i Savable i = SomeMethodThatRetunsMyModel() i.Save()
Einbetten einer gemeinsamen Struktur
Wenn eingebettete Typen bevorzugt werden, kann ein alternativer Ansatz gewählt werden. Erstellen Sie eine gemeinsame Struktur, ModelC, zur Aufnahme des Guid-Felds. Betten Sie dann ModelC in ModelA und ModelB ein. Definieren Sie die Save()-Methode innerhalb von ModelC und stellen Sie so die gemeinsame Funktionalität für beide Modelle bereit.
type ModelC struct { Guid string `orm:"pk"` } func (c ModelC) Save() error { // Common Save implementation return nil } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
Es ist wichtig zu beachten, dass dieser Einbettungsansatz keine Felder in die INSERT-Anweisung des ORM einschließt, die nicht in definiert sind ModellC. Daher können direkte Verweise auf ModelC-Methoden erforderlich sein, wenn nicht gemeinsame Felder explizit manipuliert werden müssen.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient eine gemeinsame Methode zu verschiedenen Go-Strukturen hinzufügen, die ein Feld gemeinsam nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!