問題タブ [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 を指定しているので、それも実装すると思いました。これは機能していません。なぜだめですか?