Добавить к фрагменту базового интерфейса фрагмент реализации - PullRequest
0 голосов
/ 03 июня 2019

Почему ниже не работает?

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

где *LocationEvent (структура) реализует Event (интерфейс).

Хотя ниже работает нормально:

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

Так чем же отличается при расширении фактического []*LocationEvent среза с помощью ...?

1 Ответ

0 голосов
/ 03 июня 2019

Тип среза должен точно соответствовать типу переменных аргумента в функции append. locations имеет тип []*LocationEvent и, следовательно, не совместим с []Event. При работе со слайсами в Go нет автоматического «понижения».

Вы должны скопировать местоположения в новый срез Event или добавить элементы locations по одному к срезу data.

Более подробное описание смотрите здесь: https://stackoverflow.com/a/12754757/6655315

...