我有一个接口 X 和一个名为 Y 的 X 实现。问题是我有一个接收 chan X 作为参数的方法,但是当我传递类型为 Y 的变量通道时,我收到错误消息“无法使用‘通道’(类型为 chan Y)作为类型 chan X” .我已经确保 Y 确实实现了 X 的所有方法,但我不确定如何解决这个问题。任何关于为什么会发生这种情况的帮助将不胜感激!谢谢
                    
                    
                1 回答
 
                    
                    
                            慕哥6287543
                            
                                
                            
                        
                        
                                                
                    TA贡献1831条经验 获得超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您没有持有它需要的,而是给了它错误的通道类型。
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
	提交
		取消
	