Heim > Backend-Entwicklung > Golang > Wie implementiert man effizient eine Speichermethode über unterschiedliche Go-Strukturen hinweg mit gemeinsam genutzten Feldern?

Wie implementiert man effizient eine Speichermethode über unterschiedliche Go-Strukturen hinweg mit gemeinsam genutzten Feldern?

Barbara Streisand
Freigeben: 2024-11-20 12:56:38
Original
664 Leute haben es durchsucht

How to Efficiently Implement a Save Method Across Dissimilar Go Structs with Shared Fields?

So hängen Sie eine Speichermethode an unterschiedliche Strukturen mit gemeinsam genutzten Feldern an

Bedenken Sie den folgenden Kontext:

type ModelA struct {
    Guid string `orm:"pk"`
    FiledA string
}

type ModelB struct {
    Guid string `orm:"pk"`
    FiledB string
}
Nach dem Login kopieren

Es entstand die Notwendigkeit, für beide Strukturen (ModelA und ModelB) eine Save()-Methode einzuführen. Es ist zwar möglich, eine gemeinsame Basisstruktur zu erstellen und in ModelA und ModelB einzubetten, dieser Ansatz ist jedoch aufgrund von ORM-Einschränkungen nicht realisierbar.

Alternativer Ansatz: Implementierung einer Schnittstelle

Legen Sie eine gemeinsame Schnittstelle zum Speichern von Daten fest, z. B. Savable, wie unten gezeigt:

type Savable interface {
   Save()
}
Nach dem Login kopieren

Implementieren Sie die Save()-Methode für jede Struktur und stellen Sie sicher, dass sie die Savable-Schnittstelle erfüllen:

func (a ModelA) Save() {
   // Save logic for ModelA
}

func (b ModelB) Save() {
   // Save logic for ModelB
}
Nach dem Login kopieren

Wenn diese Struktur vorhanden ist, können Sie Instanzen beider Strukturen über die Savable-Schnittstelle bearbeiten:

var i Savable
i = SomeMethodThatRetunsMyModel()
i.Save()
SomeOthermMethodThatAcceptsASavableAndCallesSave(i)
Nach dem Login kopieren

Implementierung durch Einbettung

Alternativ ist dies möglich Entscheiden Sie sich auch für einen Einbettungsansatz, indem Sie ein Basis-ModelC mit dem gemeinsamen Feld (Guid) definieren:

type ModelA struct {
   ModelC
   FiledA string
}

type ModelB struct {
   ModelC
   FiledB string
}

type ModelC struct {
   Guid string `orm:"pk"`
}

func (c ModelC) Save() error {
   // Save logic for ModelC
   return nil
}
Nach dem Login kopieren

Beachten Sie jedoch, dass diese Methode nur in ModelC definierte Felder speichert.

Überlegungen

Es ist wichtig, die Einschränkungen beider Ansätze zu beachten:

  • Der Einbettungsansatz ist möglicherweise nicht geeignet, wenn Sie statisch auf eingebettete Typen verweisen müssen.
  • Der Schnittstellenansatz bietet mehr Flexibilität, kann jedoch zu Codeduplizierung führen.

Letztendlich hängt die beste Lösung von den spezifischen Anforderungen Ihrer Anwendung ab.

Das obige ist der detaillierte Inhalt vonWie implementiert man effizient eine Speichermethode über unterschiedliche Go-Strukturen hinweg mit gemeinsam genutzten Feldern?. 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