这是我收到的错误消息:
不能在函数参数
中使用c.ReceiverChans(type [] chan * Message)作为类型[] chan interface {}
答案 0 :(得分:2)
类型不同。 *Message
实现了空接口,但这并不意味着你可以获取*Message
的切片或chan并将其传递给需要切片或接口的东西。
我将接口视为特定数据结构的方式;一对指向值的指针和指向底层类型的指针。界面的工作方式并不完全正确,但它有助于我的直觉。使用这种直觉,如果我将int传递给想要interface{}
的函数,我想我的值在被调用函数之前被编译器隐式地包含在这个接口对中。相反,函数需要[]interface{}
,我想传递[]int
,编译器可以做什么?它必须构造一个新的接口对数组,但是(a)它是昂贵的,并且(b)它不会真正起作用,因为如果例如切片被排序,原始切片将被留下单独
以下是golang常见问题解答中的问题:http://golang.org/doc/faq#convert_slice_of_interface
这里有一个关于来自go wiki的接口切片的更详细的解释,这解释得比我刚刚做的更好。 https://code.google.com/p/go-wiki/wiki/InterfaceSlice