2

这是我收到的错误消息:

不能在函数参数中使用 c.ReceiverChans (type []chan *Message) 作为 type []chan interface {}

4

1 回答 1

2

类型不同。A*Message实现了空接口,但这并不意味着您可以获取 slice 或 chan*Message并将其传递给需要接口 slice 或 chan 的东西。

我认为接口是一种特殊的数据结构的方式;一对指向值的指针和指向底层类型的指针。接口的工作原理并不完全正确,但它有助于我的直觉。使用这种直觉,如果我将一个 int 传递给一个想要一个 的函数interface{},我想我的值在调用函数之前被编译器隐式地包装在这个接口对中。相反,如果函数需要 a []interface{},而我想传递 a []int,编译器能做什么?它必须构造一个新的接口对数组,但是(a)这会很昂贵,并且(b)它不会真正起作用,因为例如如果切片被排序,原始切片将被留下独自的。

这是 golang 常见问题解答中的问题:http: //golang.org/doc/faq#convert_slice_of_interface

这是来自 go wiki 的关于接口切片的更详细的解释,它比我刚才所做的解释得更好。 https://code.google.com/p/go-wiki/wiki/InterfaceSlice

于 2013-09-15T09:23:22.647 回答