Go 中的接口数组赋值难题
Go 中,尝试将结构体数组直接赋值给接口数组,如下所示,产生编译时错误:
x := []MyStruct{...} var y []interface{} y = x // Error: cannot use x as type []interface {}
此错误源于方式的根本区别结构类型和接口存储在内存中。接口存储为两个字对,包括类型信息和数据,而结构类型存储为内存中的相邻字段。
由于这些表示不对齐,因此两者之间的直接转换是不可行的。有必要将元素单独复制到目标切片。
要解决此问题,请考虑以下选项之一:
var y []interface{} y = make([]interface{}, len(x)) for i, v := range x { y[i] = v }
var y interface{} y = x
在后一种情况下,接口保存对底层 []MyStruct 切片的抽象引用,允许多态行为。
以上是如何将 Go 结构数组分配给接口数组?的详细内容。更多信息请关注PHP中文网其他相关文章!