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

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

Susan Sarandon
发布: 2024-11-30 19:19:15
原创
244 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板