Maison > développement back-end > Golang > Comment puis-je ajouter efficacement une méthode commune à différentes structures Go partageant un champ ?

Comment puis-je ajouter efficacement une méthode commune à différentes structures Go partageant un champ ?

Barbara Streisand
Libérer: 2024-12-01 12:39:11
original
254 Les gens l'ont consulté

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

Ajout d'une méthode à différentes structures avec un champ commun dans Go

Dans votre application, vous rencontrez la nécessité d'implémenter une méthode Save() pour deux modèles, ModelA et modèle B. Malgré leurs différences, ils partagent un terrain commun, le Guid. Habituellement, une structure de base est créée pour contenir les champs communs et intégrée dans les modèles individuels. Cependant, cette approche pose un obstacle pour les ORM comme beego/orm.

Implémenter la méthode Save() avec une interface

Une solution efficace consiste à définir une interface, Enregistrable et implémentez-le dans ModelA et ModelB. Cela vous permet d'utiliser le type d'interface pour appeler la méthode Save(), quel que soit le modèle spécifique utilisé. Voici un exemple :

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()
Copier après la connexion

Intégration d'une structure commune

Si les types intégrés sont préférés, une approche alternative peut être adoptée. Créez une structure commune, ModelC, pour contenir le champ Guid. Ensuite, intégrez ModelC dans ModelA et ModelB. Définissez la méthode Save() dans ModelC, fournissant ainsi la fonctionnalité partagée entre les deux modèles.

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
}
Copier après la connexion

Il est important de noter que cette approche d'intégration n'inclura aucun champ dans l'instruction d'insertion de l'ORM qui n'est pas défini dans ModèleC. Ainsi, des références directes aux méthodes ModelC peuvent être nécessaires si des champs non courants doivent être explicitement manipulés.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal