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
Barbara Streisandoriginal
2024-12-01 12:39:11276parcourir

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()

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
}

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!

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