例子

我们时常会写一些interface,例如:

type A interface{
Print()
} type B struct {
} func (b *B) Print() {
fmt.Println("Here is *B")
}

赋值的时候:

var a A
a = &B{}

诶,这样看视乎没什么问题,但是我们没有办法避免使用数组,然后顺手就写了这样的代码

var aa []A
aa = make([]*B, 10)

好的,现在翻车了,会得到一个这样的报错:

cannot use make([]*B, 10) (type []*B) as type []A in assignment

原因

  1. []A 不是一个interface,它只是一个slice,并且刚刚好元素类型是A。
  2. []A 有自己特殊的内存分布,每一个interface{}有两个字节,一个是存储他是什么类型,另一个存储数据或者指针来指向他。因此,一个[]A是一块N*2的数据,但是[]*B是一块N*(sizeof(*B))的数据。

如何去实现

bb := []*B{&B{}, &B{}}
var aa []AA = make([]AA, len(bb))
for i, d := range bb {
aa[i] = d
}

最新文章

  1. H5前端性能测试快速入门
  2. iOS--雪花掉落特效
  3. Linux中PHP如何安装curl扩展方法
  4. 使用solr的函数查询,并获取tf*idf值
  5. 【转】为什么我说 Android 很糟糕
  6. UVALive 4452 The Ministers' Major Mess(2-sat)
  7. TCP的滑动窗口机制【转】
  8. ASP.NET Core 2.0 支付宝当面付之扫码支付
  9. nimi SearchEngin 项目思路及算法
  10. bzoj 1058: [ZJOI2007]报表统计 (Treap)
  11. Java ---- 链表逆序
  12. 图像处理及opencv汇总
  13. [转]PID控制算法原理
  14. Centos7 yum安装Chrome浏览器
  15. LeetCode--013--罗马数字转整数(java)
  16. JavaScript 模拟键盘事件和鼠标事件(比如模拟按下回车等)
  17. PCL(Point Cloud Library)的第三方库简单介绍(boost,eigen,flann,vtk,qhull)
  18. logback -- 配置详解 -- 三 -- <encoder>
  19. SqlServer存储过程(增删改查)
  20. python3.x 类和对象

热门文章

  1. class 绑定的数据对象不必内联定义在模板里
  2. GO语言反射
  3. Centos-7修改yum源(阿里yum源)
  4. 会话技术cookie与session
  5. TynSerial基本数据类型序列(还原)
  6. Uploadifive 上传'fileType'格式如何限制?
  7. mysql的配置文件解释
  8. (四)OpenCV-Python学习—形态学处理
  9. echarts3.0之关系图详解
  10. <HTML/CSS>BFC原理剖析