无法将chan实现传递给需要chan接口的方法

  • 本文关键字:chan 接口 方法 实现 go
  • 更新时间 :
  • 英文 :


我有一个接口X和一个名为Y.的X实现

问题是,我有一个方法,它接收chan X作为参数,但当我通过Y类型的可变通道时,我得到错误";不能将"channel"(类型chan Y(用作类型chan X";。

我已经确保Y确实实现了X的所有方法,但我不确定如何解决这个问题。如果您能提供任何关于为什么会发生这种情况的帮助,我们将不胜感激!

谢谢

你不能"解决";这样一来,无论XY之间的关系如何,都不能使用chan Y来代替chan X

你需要重新编写你的代码,这样,如果一个函数要求你给它一个chan X,你就给了它chan X

如果X是一个接口,而Y实现了该接口,则可以通过chan XY发送指针,但这不会使chan Y可用作chan X。这样做将完全违反func(chan X)的合同。想象一下,如果接受chan X的函数可以接收chan Y。现在,在内部,该函数希望能够在同一通道上发送Z,它也实现了X接口,但不能,因为您没有保存它所需的chan X,而是给了它错误的通道类型。

最新更新