我正在努力实现以下目标。
package main
import (
"fmt"
)
type MyStruct struct {
Value int
}
func main() {
x := []MyStruct{
MyStruct{
Value : 5,
},
MyStruct{
Value : 6,
},
}
var y []interface{}
y = x // This throws a compile time error
_,_ = x,y
}
这会产生编译时错误:
sample.go:21: cannot use x (type []MyStruct) as type []interface {} in assignment
为什么这不可能?。如果没有其他方法在Golang中保存通用对象数组?
答案 0 :(得分:3)
interface{}
存储为双字对,一个字描述基础类型信息,一个字描述该接口内的数据:
https://research.swtch.com/interfaces
在这里,我们看到第一个词存储了类型信息,第二个词存储了b
中的数据。
结构类型的存储方式不同,它们没有这种配对。他们的结构域在内存中彼此相邻。
https://research.swtch.com/godata
您无法将一个转换为另一个,因为它们在内存中的表示形式不同。
必须将元素分别复制到目的地 切片。
https://golang.org/doc/faq#convert_slice_of_interface
要回答您的上一个问题,您可以使用[]interface
这是一个接口片段,其中每个接口都表示如上,或仅interface{}
,其中该接口中保存的基础类型为[]MyStruct
1}}
var y interface{}
y = x
或
y := make([]interface{}, len(x))
for i, v := range x {
y[i] = v
}