猿问

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

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

问题是我有一个接收 chan X 作为参数的方法,但是当我传递类型为 Y 的变量通道时,我收到错误消息“无法使用‘通道’(类型为 chan Y)作为类型 chan X” .

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

谢谢


波斯汪
浏览 88回答 1
1回答

慕哥6287543

你不能用那种方式“解决”这个问题,无论和之间的关系如何,chan Y都不能用 a 代替 a 。chan XXY您需要重新编写代码,这样,如果一个函数需要您给它一个chan X,那么您就是给它一个chan X.如果X是一个接口,并且Y实现了该接口,您可以将指针发送到Ya 上chan X,但这并不能使 achan Y用作 a chan X。这样做会完全破坏 a 的合同func(chan X)。想象一下,如果接受 a 的函数chan X可以接收 a chan Y。现在在内部,该函数希望能够通过同一通道发送一个Z也实现X接口的 ,但是不能,因为chan X您没有持有它需要的,而是给了它错误的通道类型。
随时随地看视频慕课网APP

相关分类

Go
我要回答