Maison  >  Article  >  développement back-end  >  Comment ajouter efficacement des fonctionnalités partagées pour des structures Go avec différents champs ?

Comment ajouter efficacement des fonctionnalités partagées pour des structures Go avec différents champs ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 08:49:02806parcourir

How to Efficiently Add Shared Functionality to Go Structs with Different Fields?

Comment ajouter des fonctionnalités partagées à des structures Go différenciées

Dans Go, vous pourriez rencontrer le besoin d'ajouter une méthode commune aux structures qui partagent un champ spécifique, tel que le champ Guid dans l'exemple suivant :

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

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

Traditionnellement, on pourrait envisager d'utiliser un structure de base et en l'intégrant dans ModelA et ModelB. Cependant, cette approche peut ne pas fonctionner de manière transparente avec la bibliothèque orm.

Une solution viable implique l'utilisation d'interfaces. En définissant une interface, vous pouvez déclarer un contrat commun que ModelA et ModelB doivent implémenter :

type Savable interface {
    Save()
}

Ensuite, implémentez la méthode Save() pour les deux structures :

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

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

Maintenant , vous pouvez créer une variable de type Savable et l'attribuer à ModelA ou ModelB :

var i Savable
i = ModelA{}
i.Save()

Vous pouvez également utiliser un type intégré approche :

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

type ModelA struct {
    ModelC
    FiledA string
}

type ModelB struct {
    ModelC
    FiledB string
}

Dans ce cas, définissez la méthode Save() dans la structure ModelC intégrée :

func (c ModelC) Save() {
    // Implementation
}

Bien que cette approche semble simple, il est important de noter que l'o. L'instruction Insert(this) insérera uniquement les champs définis sur ModelC, pas ceux sur ModelA et ModelB.

Par conséquent, il est recommandé d'éviter d'utiliser l'intégration. lorsque vous devez encore référencer explicitement le type intégré. Dans de tels cas, l'approche de l'interface offre une plus grande flexibilité.

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