ホームページ > バックエンド開発 > Golang > 基本型を使用せずに Go でポリモーフィズムを実装するにはどうすればよいですか?

基本型を使用せずに Go でポリモーフィズムを実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-17 00:31:03
オリジナル
969 人が閲覧しました

How to Implement Polymorphism in Go without Base Types?

Go におけるポリモーフィズムを理解する

複数のタイプのトランザクションと共有基本型を含むプログラミングの問題を解決しようとしているときに、ポリモーフィズムの実装で課題に遭遇したことがあるかもしれません。ポリモーフィズムの概念を詳しく調べて、特定の問題に対処しましょう。

Go では、オブジェクト指向言語とは異なり、ポリモーフィズムはインターフェイスに限定されます。インターフェイスは、さまざまな型で実装できるメソッドのセットを定義します。

あなたの場合、「基本」型 BaseTX と 2 つの子型 RewardTX とAllowanceTX を作成しようとしていました。これらの子タイプには、基本タイプと比較して追加のフィールドがありました。

問題は、TXapi インターフェイスで動作する関数、logicAndSaveTX を定義したために発生しました。ただし、この関数の実装は BaseTX 型で動作するため、子型から追加フィールドが除外されます。

解決策は、「基本」型の概念を削除することです。代わりに、メタデータをトランザクション間で共有される共通フィールドとして考えてください。メタデータを別のタイプとして宣言し、RewardTX タイプとAllowanceTX タイプに埋め込むことができます。各型は、特定のフィールドを変更する独自のlogicAndSaveTXメソッドを持つことができます。

更新された例は次のとおりです:

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
}
ログイン後にコピー

合成を採用し、メソッドの明確なスコープを定義することで、次のような方法でポリモーフィズムを効果的に実装できます。 Go のインターフェイス

以上が基本型を使用せずに Go でポリモーフィズムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート