首页 > 后端开发 > Golang > 如何将 Go 结构数组分配给接口数组?

如何将 Go 结构数组分配给接口数组?

DDD
发布: 2024-11-30 19:52:16
原创
431 人浏览过

How Can I Assign a Go Struct Array to an Interface Array?

Go 中的接口数组赋值难题

Go 中,尝试将结构体数组直接赋值给接口数组,如下所示,产生编译时错误:

x := []MyStruct{...}
var y []interface{}
y = x // Error: cannot use x as type []interface {}
登录后复制

此错误源于方式的根本区别结构类型和接口存储在内存中。接口存储为两个字对,包括类型信息和数据,而结构类型存储为内存中的相邻字段。

由于这些表示不对齐,因此两者之间的直接转换是不可行的。有必要将元素单独复制到目标切片。

要解决此问题,请考虑以下选项之一:

  • 接口切片:使用 []interface{} 切片,其中每个元素都是代表结构的接口类型:
var y []interface{}
y = make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
登录后复制
  • 结构体切片的接口:使用interface{}变量来保存[]MyStruct切片:
var y interface{}
y = x
登录后复制

在后一种情况下,接口保存对底层 []MyStruct 切片的抽象引用,允许多态行为。

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

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