Heim >Backend-Entwicklung >Golang >Wie kann ich effizient eine gemeinsame Methode zu verschiedenen Go-Strukturen hinzufügen, die ein Feld gemeinsam nutzen?

Wie kann ich effizient eine gemeinsame Methode zu verschiedenen Go-Strukturen hinzufügen, die ein Feld gemeinsam nutzen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-01 12:39:11206Durchsuche

How Can I Efficiently Add a Common Method to Different Go Structs Sharing a Field?

Hinzufügen einer Methode zu verschiedenen Strukturen mit einem gemeinsamen Feld in Go

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!

Stellungnahme:
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