Heim > Artikel > Backend-Entwicklung > Wie kann man gemeinsam genutzte Funktionalität effizient zu Go-Strukturen mit unterschiedlichen Feldern hinzufügen?
So fügen Sie differenzierten Go-Strukturen gemeinsame Funktionalität hinzu
In Go müssen Sie möglicherweise eine gemeinsame Methode zu Strukturen hinzufügen, die gemeinsam genutzt werden ein bestimmtes Feld, wie das Guid-Feld im folgenden Beispiel:
type ModelA struct { Guid string `orm:"pk"` FiledA string } type ModelB struct { Guid string `orm:"pk"` FiledB string }
Traditionell könnte man erwägen, eine Basisstruktur zu verwenden und diese in ModelA und ModelB einzubetten. Allerdings funktioniert dieser Ansatz möglicherweise nicht nahtlos mit der Orm-Bibliothek.
Eine praktikable Lösung beinhaltet die Verwendung von Schnittstellen. Durch die Definition einer Schnittstelle können Sie einen gemeinsamen Vertrag deklarieren, den sowohl ModelA als auch ModelB implementieren müssen:
type Savable interface { Save() }
Als nächstes implementieren Sie die Save()-Methode für beide Strukturen:
func (a ModelA) Save() { // Implementation for ModelA } func (b ModelB) Save() { // Implementation for ModelB }
Jetzt , können Sie eine Variable vom Typ „Saveable“ erstellen und diese entweder ModelA oder ModelB zuweisen:
var i Savable i = ModelA{} i.Save()
Alternativ können Sie einen Ansatz mit eingebetteten Typen verwenden:
type ModelC struct { Guid string `orm:"pk"` } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
In diesem Fall Definieren Sie die Save()-Methode in der eingebetteten ModelC-Struktur:
func (c ModelC) Save() { // Implementation }
Obwohl dieser Ansatz unkompliziert erscheint, ist es wichtig zu beachten, dass die o.Insert(this)-Anweisung nur auf ModelC definierte Felder einfügt, nicht diese auf ModelA und ModelB.
Daher wird empfohlen, die Einbettung zu vermeiden, wenn Sie dennoch explizit auf den eingebetteten Typ verweisen müssen. In solchen Fällen bietet der Schnittstellenansatz eine größere Flexibilität.
Das obige ist der detaillierte Inhalt vonWie kann man gemeinsam genutzte Funktionalität effizient zu Go-Strukturen mit unterschiedlichen Feldern hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!