我有一个接口 X 和一个名为 Y 的 X 实现。问题是我有一个接收 chan X 作为参数的方法,但是当我传递类型为 Y 的变量通道时,我收到错误消息“无法使用‘通道’(类型为 chan Y)作为类型 chan X” .我已经确保 Y 确实实现了 X 的所有方法,但我不确定如何解决这个问题。任何关于为什么会发生这种情况的帮助将不胜感激!谢谢
1 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
你不能用那种方式“解决”这个问题,无论和之间的关系如何,chan Y
都不能用 a 代替 a 。chan X
X
Y
您需要重新编写代码,这样,如果一个函数需要您给它一个chan X
,那么您就是给它一个chan X
.
如果X
是一个接口,并且Y
实现了该接口,您可以将指针发送到Y
a 上chan X
,但这并不能使 achan Y
用作 a chan X
。这样做会完全破坏 a 的合同func(chan X)
。想象一下,如果接受 a 的函数chan X
可以接收 a chan Y
。现在在内部,该函数希望能够通过同一通道发送一个Z
也实现X
接口的 ,但是不能,因为chan X
您没有持有它需要的,而是给了它错误的通道类型。
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消