Преобразование фрагмента структур в фрагмент пустого интерфейса

Я пытаюсь назначить ломтик структур ломтику []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 ответ

Решение

Вам придется копировать по одному. Там нет никакого способа обойти это.

Если это помогает принять это, вы должны подумать о том, что обертывание структуры в интерфейсе действительно оборачивает ее на уровне памяти. Интерфейс содержит указатель на исходный тип и дескриптор для самого типа. При приведении единственной структуры к интерфейсу вы действительно оборачиваете ее. Поэтому копирование их по одному необходимо для того, чтобы обернуть структуры в интерфейсе.

Другие вопросы по тегам