当前位置: 首页 > 面试题库 >

将结构片转换为空接口片

陈鸿才
2023-03-14
问题内容

我正在尝试将切片的结构分配给切片[]interface{}(以传递到AppEngine的切片datastore.PutMulti。但是,由于这两种类型显然不兼容,这会导致编译错误:
cannot use type[]*MyStruct as type []interface { } in assignment

基本上我有:

var src []*MyStruct
var dest []interface{}
…
dest = src  // This line fails.

反正是有复制srcdest不复制一个-AT-A-时间每个元素?


问题答案:

您将不得不一次复制一次。没有办法解决。

如果有助于接受这一点,则应考虑以下事实:将结构包装在接口中实际上确实将其包装在内存级别。接口包含指向原始类型的指针和类型本身的描述符。将单个结构投射到接口时,您实际上是在包装它。因此,必须一次复制一次,以便将结构包装在接口中。



 类似资料:
  • 问题内容: 如果我有: 上面是固定的-我不能更改foo或bar。另外,baz必须在bar内转换回foo struct指针。如何将&foo {}强制转换为interface {},以便在调用bar时可以将其用作参数? 问题答案: 要打开到一个很简单: 为了返回到,您可以执行 类型断言 : 或 类型开关 (类似,但可以是多种类型则很有用):

  • 问题内容: 我很好奇为什么Go 不会隐式转换为,而Go 会隐式转换为。我缺少这种转换的重要内容吗? 例: 抱怨 不能在函数参数中使用(类型[]字符串)作为类型[] interface {} 如果我尝试明确执行此操作,则会遇到同样的事情:抱怨 无法将(类型[]字符串)转换为类型[] interface {} 因此,每次我需要进行这种转换时(这似乎很多),我一直在做这样的事情: 是否有更好的方法来执行

  • 虽然我们正在为一个特定的(但已经很大的)位置工作,但如果解决方案也能扩展到其他位置就更好了。因为我们只会缓存与系统有关的瓷砖,那么仅仅平铺enitre星球是最好的选择吗?瓦片的尺寸可以用弧秒/分钟来测量,或者这是个坏主意吗? 我们已经使用了Postgres,这似乎可以用PostGIS来完成(这就是光栅吗?),但是在不知道我到底在找什么的情况下跳入文档/教程证明是很困难的。有什么想法吗?

  • 问题内容: 我正在尝试使用该包将Go结构转换为JSON,但我得到的只是。我敢肯定这是完全显而易见的,但我看不到。 然后,当我尝试运行它时,我得到以下信息: 问题答案: 您需要导出的字段,以便在包装可以看到它。将字段重命名为。 输出:

  • 问题内容: 我试图在Go中创建一个通用方法,该方法将填充来自的使用数据。例如,方法签名和用法可能类似于: 我知道可以使用JSON作为中介来完成;还有另一种更有效的方法吗? 问题答案: 最简单的方法是使用https://github.com/mitchellh/mapstructure 如果您想自己做,则可以执行以下操作: http://play.golang.org/p/tN8mxT_V9h

  • 问题内容: 有没有一种方法可以将Swift结构的地址转换为无效的UnsafeMutablePointer? 我尝试了一下但没有成功: 谢谢! 编辑: 我实际上正在尝试 将上下文 移植到Swift中 学习CoreAudio 的第一个示例。 这是我到目前为止所做的: 我正在努力留在Swift中,但是如果事实证明这是一个问题而不是优势,那么我最终将链接到C函数。 编辑:底线 如果您因为试图在Swift中