問題タブ [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.

0 投票する
1 に答える
170 参照

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 のオブジェクトを返していますTransportTransportインターフェイスはメソッドを指定しますWaitReceiveChannel()InboundTransportも指定する自己定義のインターフェースがありますWaitReceiveChannel()。私が呼び出しているサードパーティのメソッドはTransport、 method を介して実装するオブジェクトを返しますWaitReceiveChannel()InboundTransport後者もWaitReceiveChannel()同じ型の a を指定しているので、それも実装すると思いました。これは機能していません。なぜだめですか?