Golang不会自动把slice转换成interface{}类型的slice
例子
我们时常会写一些interface,例如:
|
|
赋值的时候:
|
|
诶,这样看视乎没什么问题,但是我们没有办法避免使用数组,然后顺手就写了这样的代码
|
|
好的,现在翻车了,会得到一个这样的报错:
cannot use make([]*B, 10) (type []*B) as type []A in assignment
原因
-
[]A 不是一个interface,它只是一个slice,并且刚刚好元素类型是A。
-
[]A 有自己特殊的内存分布,每一个interface{}有两个字节,一个是存储他是什么类型,另一个存储数据或者指针来指向他。因此,一个[]A是一块N*2的数据,但是[]*B是一块N*(sizeof(*B))的数据。
如何去实现
|
|
- 原文作者:Daryl
- 原文链接:https://siskinc.github.io/post/golang%E4%B8%8D%E4%BC%9A%E8%87%AA%E5%8A%A8%E6%8A%8Aslice%E8%BD%AC%E6%8D%A2%E6%88%90interface%E7%B1%BB%E5%9E%8B%E7%9A%84slice/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。