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



这是我收到的错误消息:

不能在函数参数中使用 c.ReceiverChans (类型 []chan *Message) 作为类型 []chan 接口 {}

类型不同。*Message实现空接口,但这并不意味着您可以获取*Message的切片或 chan 并将其传递给需要一段或 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

最新更新