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

时间:2012-02-02 23:20:46

标签: 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.

无论如何都要将src复制到dest而不是一次一个地复制每个元素吗?

1 个答案:

答案 0 :(得分:6)

你将不得不一次复制一次。没有办法解决它。

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