关于谷歌应用引擎:将结构片转换为空接口片

Converting slice of structs to slice of empty interface

我试图将一个结构切片分配给一个切片[]interface{},以传递给appengine的datastore.PutMulti。但是,这会导致编译错误,因为这两种类型显然不兼容:埃多克斯1〔2〕

基本上我有:

1
2
3
4
var src []*MyStruct
var dest []interface{}

dest = src  // This line fails.

是否有必要在不逐个复制每个元素的情况下,将src复制到dest中?


你得一次复制一份。这是不可能的。

如果它有助于接受这一点,那么您应该考虑这样一个事实:在接口中包装一个结构实际上是在内存级别包装它。接口包含指向原始类型的指针和类型本身的描述符。当将单个结构强制转换为接口时,实际上是在包装它。因此,为了将结构包装在接口中,需要一次复制它们。