为什么下面的方法不起作用?

locations := make([]*LocationEvent, 0)
data := make([]Event, 0)
data = append(data, locations...)

其中*LocationEvent(结构)实现Event(接口)。

虽然以下工作正常:
data = append(data, &LocationEvent{}, &LocationEvent{})

那么,当使用[]*LocationEvent扩展实际的... slice 时,它有何不同?

最佳答案

slice 类型必须与append函数中的可变参数的类型完全匹配。 locations属于[]*LocationEvent类型,因此与[]Event不兼容。使用 slice 时,Go中没有自动的“向下转换”。

您必须将位置复制到新的Event slice 中,或将locations的各项一一添加到data slice 中。

有关更多说明,请参见此处:https://stackoverflow.com/a/12754757/6655315

10-08 04:44