Преобразование фрагмента структур в фрагмент пустого интерфейса
Я пытаюсь назначить ломтик структур ломтику []interface{}
(чтобы перейти в AppEngine's datastore.PutMulti
, Однако это приводит к ошибкам компиляции, так как эти два типа явно несовместимы:cannot use type[]*MyStruct as type []interface { } in assignment
В основном у меня есть:
var src []*MyStruct
var dest []interface{}
…
dest = src // This line fails.
Есть ли в любом случае, чтобы скопировать src
в dest
не копируя каждый элемент по одному?
1 ответ
Вам придется копировать по одному. Там нет никакого способа обойти это.
Если это помогает принять это, вы должны подумать о том, что обертывание структуры в интерфейсе действительно оборачивает ее на уровне памяти. Интерфейс содержит указатель на исходный тип и дескриптор для самого типа. При приведении единственной структуры к интерфейсу вы действительно оборачиваете ее. Поэтому копирование их по одному необходимо для того, чтобы обернуть структуры в интерфейсе.