golang 实现接口与数组接合的问题

1034992601 · · 3206 次点击
试了一下把 dd := []TestA{TestA{}, TestA{}} 改成 dd := []InterfaceT{TestA{}, TestA{}} 就可以了,原理我也不太懂,等大佬讲解
#1
更多评论
协变和逆变,上网搜一下就知道了,为了代码的安全性,肯定是不能支持你这么干的,不然早晚出问题。 比如你外面是[]TestA,传入函数的时候支持签名[]InterfaceT,然后你函数里面把切片第三个元素改成TestB类型(which 也是InterfaceT)那外面的那个[]TestA是不是有问题?它第三个元素变成TestB了呀。所以你想要的这种行为是不可能支持的。
#2