問題タブ [libchan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - goインターフェースでポリモーフィズムを実装しようとしています
サードパーティのライブラリ (この場合はlibchan ) の上にレイヤーを作成しようとしています。私が定義したインターフェースは次のとおりです。
InboundTransportは type の代用となるように意図されていますTransport:
文脈上、これがlibchan.Receiver定義です (これは my と一致することに注意してくださいReceiverStream:
これは、ここTransportで libchan ライブラリによって返されます。
libchan.TransportメソッドをInboundTransport共有しているのでWaitReceiveChannel() (ReceiverStream, error)、次のように、一方を他方にサブスクライブできるはずだと考えました。
しかし、私はエラーが発生します:
このエラーが意味するのは、の型がReceiverStream一致しないlibchan.Receiverということだと思いますが、golang インターフェイスは暗黙的であり、戻り値の型が期待されるインターフェイスと同じメソッドを実装している限り、コンパイルに合格すると思いました。サード パーツ ライブラリによって返されたインターフェイスに自己定義インターフェイスを重ね合わせることができるように、変更できるものはありますか?
TLDR: サードパーティの lib が interface のオブジェクトを返していますTransport。Transportインターフェイスはメソッドを指定しますWaitReceiveChannel()。InboundTransportも指定する自己定義のインターフェースがありますWaitReceiveChannel()。私が呼び出しているサードパーティのメソッドはTransport、 method を介して実装するオブジェクトを返しますWaitReceiveChannel()。InboundTransport後者もWaitReceiveChannel()同じ型の a を指定しているので、それも実装すると思いました。これは機能していません。なぜだめですか?