无法将 chan 实现传递给需要 chan 接口的方法
Cannot pass chan implementation to method requiring chan interface
我有一个接口 X 和一个名为 Y 的 X 实现。
问题是我有一个接收 chan X 作为参数的方法,但是当我传递类型为 Y 的变量通道时,出现错误“无法使用 'channel'(类型为 chan Y) 作为类型 chan X".
我已经确定 Y 确实实现了 X 的所有方法,但我不确定如何解决这个问题。任何关于为什么会发生这种情况的帮助将不胜感激!
谢谢
你不能用那种方式“解决”这个问题,chan Y
不能代替 chan X
,不管 X
和 [= 之间的关系如何13=].
您需要修改您的代码,这样,如果一个函数需要您给它一个 chan X
,您就给它一个 chan X
。
如果 X
是一个接口,并且 Y
实现了该接口,您可以通过 chan X
发送指向 Y
的指针,但这不会产生chan Y
可用作 chan X
。这样做会完全破坏 func(chan X)
的契约。想象一下,如果接受 chan X
的函数可以接收 chan Y
。现在函数内部希望能够通过相同的通道发送一个 Z
,它也实现了 X
接口,但是不能,因为它不需要保存 chan X
,您给它的频道类型有误。
我有一个接口 X 和一个名为 Y 的 X 实现。
问题是我有一个接收 chan X 作为参数的方法,但是当我传递类型为 Y 的变量通道时,出现错误“无法使用 'channel'(类型为 chan Y) 作为类型 chan X".
我已经确定 Y 确实实现了 X 的所有方法,但我不确定如何解决这个问题。任何关于为什么会发生这种情况的帮助将不胜感激!
谢谢
你不能用那种方式“解决”这个问题,chan Y
不能代替 chan X
,不管 X
和 [= 之间的关系如何13=].
您需要修改您的代码,这样,如果一个函数需要您给它一个 chan X
,您就给它一个 chan X
。
如果 X
是一个接口,并且 Y
实现了该接口,您可以通过 chan X
发送指向 Y
的指针,但这不会产生chan Y
可用作 chan X
。这样做会完全破坏 func(chan X)
的契约。想象一下,如果接受 chan X
的函数可以接收 chan Y
。现在函数内部希望能够通过相同的通道发送一个 Z
,它也实现了 X
接口,但是不能,因为它不需要保存 chan X
,您给它的频道类型有误。