Maison >développement back-end >Golang >Comment implémenter le polymorphisme en Go sans types de base ?

Comment implémenter le polymorphisme en Go sans types de base ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 00:31:03933parcourir

How to Implement Polymorphism in Go without Base Types?

Comprendre le polymorphisme dans Go

En essayant de résoudre un problème de programmation impliquant plusieurs types de transactions et un type de base partagée, vous avez peut-être rencontré des difficultés lors de la mise en œuvre du polymorphisme. Examinons le concept de polymorphisme et abordons votre problème spécifique.

Dans Go, contrairement aux langages orientés objet, le polymorphisme est limité aux interfaces. Les interfaces définissent un ensemble de méthodes qui peuvent être implémentées par différents types.

Dans votre cas, vous tentiez de créer un type "de base", BaseTX, et deux types enfants, RewardTX et AllowanceTX. Ces types enfants avaient des champs supplémentaires par rapport à la base.

Le problème est survenu parce que vous avez défini une fonction, logicAndSaveTX, qui fonctionne sur l'interface TXapi. Cependant, l'implémentation de cette fonction opère sur le type BaseTX, conduisant à l'exclusion des champs supplémentaires des types enfants.

La solution réside dans la suppression de la notion de type "base". Considérez plutôt les métadonnées comme des champs communs partagés entre les transactions. Vous pouvez déclarer les métadonnées en tant que type distinct et les intégrer dans les types RewardTX et AllowanceTX. Chaque type peut alors avoir sa propre méthode logicAndSaveTX qui modifie des champs spécifiques.

Voici un exemple mis à jour :

type TXapi interface {
    logicAndSaveTX()
}

type Metadata struct {
    Field1 string
    Field2 string
}

type RewardTX struct {
    Metadata 
}

func (tx RewardTX) logicAndSaveTX() {
    // Modify TX-specific fields
    tx.Field1 = "Reward Field 1"
    tx.Field2 = "Reward Field 2"

    // Logic and save metadata shared with AllowanceTX
}

type AllowanceTX struct {
    Metadata 
    AddField string
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Modify TX-specific fields
    tx.Field1 = "Allowance Field 1"
    tx.Field2 = "Allowance Field 2"
    tx.AddField = "Allowance Additional Field"

    // Logic and save metadata shared with RewardTX
}

En adoptant la composition et en définissant des portées claires pour les méthodes, vous pouvez implémenter efficacement le polymorphisme via interfaces dans Go.

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