Maison > développement back-end > Golang > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-19 08:49:02
original
806 Les gens l'ont consulté

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

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

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

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

var i Savable
i = ModelA{}
i.Save()
Copier après la connexion

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

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

func (c ModelC) Save() {
    // Implementation
}
Copier après la connexion

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!

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