为什么我不能在函数参数中使用type [] chan * Message作为类型[] chan interface {}?

时间:2013-09-15 08:05:02

标签: concurrency go

这是我收到的错误消息:

  

不能在函数参数

中使用c.ReceiverChans(type [] chan * Message)作为类型[] chan interface {}

1 个答案:

答案 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