Wie kann man gemeinsam genutzte Funktionalität effizient zu Go-Strukturen mit unterschiedlichen Feldern hinzufügen?

Susan Sarandon
Freigeben: 2024-11-19 08:49:02
Original
806 Leute haben es durchsucht

How to Efficiently Add Shared Functionality to Go Structs with Different Fields?

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
}
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

Jetzt , können Sie eine Variable vom Typ „Saveable“ erstellen und diese entweder ModelA oder ModelB zuweisen:

var i Savable
i = ModelA{}
i.Save()
Nach dem Login kopieren

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
}
Nach dem Login kopieren

In diesem Fall Definieren Sie die Save()-Methode in der eingebetteten ModelC-Struktur:

func (c ModelC) Save() {
    // Implementation
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage