无法将 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 ,您给它的频道类型有误。