Maison >développement back-end >Golang >Comment implémenter efficacement une méthode de sauvegarde sur des structures Go différentes avec des champs partagés ?

Comment implémenter efficacement une méthode de sauvegarde sur des structures Go différentes avec des champs partagés ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-20 12:56:38660parcourir

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

Comment ajouter une méthode de sauvegarde à des structures différentes avec des champs partagés

Considérez le contexte suivant :

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

type ModelB struct {
    Guid string `orm:"pk"`
    FiledB string
}

Le besoin s'est fait sentir d'introduire une méthode Save() pour les deux structures (ModelA et ModelB). Bien qu'il soit possible de créer une structure de base commune et de l'intégrer dans ModelA et ModelB, cette approche n'est pas viable en raison des limitations de l'ORM.

Approche alternative : implémentation d'une interface

Désignez une interface commune pour enregistrer les données, telle que Savable, comme indiqué ci-dessous :

type Savable interface {
   Save()
}

Implémentez la méthode Save() pour chaque structure, en vous assurant qu'elles satisfont à l'interface Savable :

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

func (b ModelB) Save() {
   // Save logic for ModelB
}

Avec cette structure en place, vous pouvez opérer sur des instances de l'une ou l'autre structure via l'interface Savable :

var i Savable
i = SomeMethodThatRetunsMyModel()
i.Save()
SomeOthermMethodThatAcceptsASavableAndCallesSave(i)

Implémentation à l'aide de l'intégration

Alternativement, vous pouvez optez également pour une approche d'embedding en définissant un ModelC de base avec le champ commun (Guid) :

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
}

Notez cependant que cette méthode ne sauvegardera que les champs définis dans ModelC.

Considérations

Il est important de noter les limites des deux approches :

  • L'approche d'intégration peut ne pas convenir si vous devez référencer statiquement des types intégrés.
  • L'approche par interface offre plus de flexibilité mais peut entraîner une duplication de code.

En fin de compte, la meilleure solution dépend des exigences spécifiques de votre application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn