将结构切片转换为空接口切片

djd*_*djd 4 google-app-engine go

我正在尝试将一片结构分配给一个切片[]interface{}(传递到AppEngine中datastore.PutMulti.但是,这会导致编译错误,因为这两种类型显然是不兼容的:
cannot use type[]*MyStruct as type []interface { } in assignment

基本上我有:

var src []*MyStruct
var dest []interface{}
…
dest = src  // This line fails.
Run Code Online (Sandbox Code Playgroud)

有没有反复复制srcdest每个元素一次一个?

Lil*_*ard 6

你将不得不一次复制一次.没有办法绕过它.

如果它有助于接受这个,你应该考虑这样一个事实,即在接口中包装一个struct实际上确实将它包装在内存级别.接口包含指向原始类型的指针和类型本身的描述符.将单个结构体转换为接口时,您实际上是在包装它.因此,为了将结构包装在界面中,有必要一次一个地复制它们.