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