【问题标题】:Append to the slice of base interface slice of the implementations附加到实现的基本接口切片的切片
【发布时间】:2019-10-19 10:03:55
【问题描述】:

为什么下面的不起作用?

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

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

虽然以下工作正常:

data = append(data, &LocationEvent{}, &LocationEvent{})

那么使用... 扩展实际的[]*LocationEvent 切片有何不同?

【问题讨论】:

    标签: go interface append slice


    【解决方案1】:

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

    您必须将位置复制到Event 的新切片中,或者将locations 的项目逐一添加到data 切片中。

    更多解释请看这里:https://stackoverflow.com/a/12754757/6655315

    【讨论】:

      猜你喜欢
      • 2017-09-22
      • 2012-10-11
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 2020-07-09
      • 2019-01-05
      • 2015-11-09
      相关资源
      最近更新 更多