在 Go 中,将结构体数组直接分配给接口数组会引发编译时错误。要了解原因,让我们深入研究底层机制。
interface{} 表示可以存储任何值的泛型类型。但是,它在内部表示为两个单词对:
与接口相比,结构体将其字段连续存储在内存中,没有单独的类型词。
由于结构体和接口具有不同的内存表示形式,因此它们不能直接赋值。类型系统确保这一点以维护类型安全。
要实现所需的行为,请考虑以下选项:
使用接口切片
您可以创建接口切片并分配结构元素分别:
y := make([]interface{}, len(x)) for i, v := range x { y[i] = v }
将接口存储到切片
或者,将接口存储到结构切片:
var y interface{} y = x
以上是Go的`interface{}`数组可以直接保存结构体数组吗?的详细内容。更多信息请关注PHP中文网其他相关文章!