douquan1015 2019-06-03 20:42
浏览 84
已采纳

附加到实现的基本接口部分

Why the below doesn't work?

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

where *LocationEvent (struct) implements Event (interface).

While the below works fine:

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

So how it is different when expanding the actual []*LocationEvent slice using ...?

  • 写回答

1条回答 默认 最新

  • dounangqie4819 2019-06-03 20:46
    关注

    The slice type must match the type of the variadic arguments in the append function exactly. locations is of type []*LocationEvent, and thus not compatible with []Event. There is no automatic "downcasting" in Go when working with slices.

    You have to copy the locations to a new slice of Event, or add the items of locations one-by-one to the data slice.

    For more explanation look here: https://stackoverflow.com/a/12754757/6655315

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)