私は、ストレージAからフェッチして対応するタイプのストレージBに変換して格納する2つのストレージの中間層を作ろうとしています。私が変換する必要がある約50-100タイプがあるので、map[string]func
を使用し、storageA.Type
に基づいて、どの変換機能を呼び出す必要があるかを判断しました。インタフェースタイプのインタフェースを返す(別の)インタフェースタイプの構造体
これらの変換関数はそれぞれ、異なる構造体を返します。これらの構造体はすべて、ストレージBのさまざまな型を反映します。これらのストレージB構造体のそれぞれは共通のインタフェースを実装しているため、関数を呼び出すことができます。私の問題煮詰め
はStorageBtype1
インターフェイスStorageBType
を実装していても、私はfunc(StorageAType) StorageBType1
func(StorageAType) StorageBType
にキャストすることができないということです。
単語の問題を説明するのが難しいと私は理解しているので、これはむしろ長くplaygroundを作成しました。 38行目から41行目と60行目から63行目をコメントアウトすると、実行されますが、使いたい行です。申し訳ありませんが、私はそれほど冗長ではっきりとした例を理解できませんでした。
回答にコメントする担当者がいないと思うので、私は私のstackoverflowアカウントを再作成しなければならなかったことに注意してください。
*編集:
非常に典型的です。ちょうど私がそれを解決する方法を実現することを頼んだ直後。正確な型の代わりにコンバータ関数のインタフェース型を返すことによって、この変更はplaygroundになりました。