为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
波斯汪 2022-11-23 14:11:58

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

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

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

谢谢


查看完整描述

1 回答

?
慕哥6287543

TA贡献1513条经验 获得超10个赞

你不能用那种方式“解决”这个问题,无论和之间的关系如何,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您没有持有它需要的,而是给了它错误的通道类型。


查看完整回答
反对 回复 5天前

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信