首页 >后端开发 >Golang >如何在 Go 中将结构体切片分配给接口切片?

如何在 Go 中将结构体切片分配给接口切片?

Susan Sarandon
Susan Sarandon原创
2024-11-30 19:19:15338浏览

How Can I Assign a Slice of Structs to a Slice of Interfaces in Go?

将结构体切片分配给接口切片

尝试将结构体切片 ([]MyStruct) 分配给接口切片 ( []interface{}),您可能会遇到编译时错误。这是因为结构体和接口具有不同的内存表示形式。

结构体的字段在内存中相邻存储,而接口则存储为两个字对,一个用于类型信息,一个用于实际数据。这种差异阻止了直接赋值。

可能的解决方案:

  • 单独复制元素:您可以手动迭代结构体切片并复制每个元素进入界面
y := make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
  • 利用接口包装器:您可以创建一个实现interface{}接口并保存底层结构的包装器类型。
type IMyStruct struct {
    MyStruct
}

func (i IMyStruct) Interface() interface{} {
    return i.MyStruct
}

x := []MyStruct{{5}, {6}}
y := []interface{}{IMyStruct{x[0]}, IMyStruct{x[1]}}
  • 使用空接口:您可以将结构体切片分配给一个空接口,该接口可以保存任何类型的值。
var y interface{}
y = x // No type conversion required

以上是如何在 Go 中将结构体切片分配给接口切片?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn