我有一个接口X和一个名为Y.的X实现
问题是,我有一个方法,它接收chan X作为参数,但当我通过Y类型的可变通道时,我得到错误";不能将"channel"(类型chan Y(用作类型chan X";。
我已经确保Y确实实现了X的所有方法,但我不确定如何解决这个问题。如果您能提供任何关于为什么会发生这种情况的帮助,我们将不胜感激!
谢谢
你不能"解决";这样一来,无论X
和Y
之间的关系如何,都不能使用chan Y
来代替chan X
。
你需要重新编写你的代码,这样,如果一个函数要求你给它一个chan X
,你就给了它chan X
。
如果X
是一个接口,而Y
实现了该接口,则可以通过chan X
向Y
发送指针,但这不会使chan Y
可用作chan X
。这样做将完全违反func(chan X)
的合同。想象一下,如果接受chan X
的函数可以接收chan Y
。现在,在内部,该函数希望能够在同一通道上发送Z
,它也实现了X
接口,但不能,因为您没有保存它所需的chan X
,而是给了它错误的通道类型。