栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang反射:无法设置包装结构的界面字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang反射:无法设置包装结构的界面字段

您似乎正在尝试修改存储在接口变量中的动态值。您可以对接口变量执行的唯一操作是获取或设置动态值(进行复制的操作),并检查存储值的类型。

要了解为什么事情是这样的,请想象有一个这样的操作,并且我们有以下代码:

var ptr *A = pointer_to_dynamic_value(x)x = B{...}

什么是

ptr
现在代表什么?在将新值分配给接口变量时,该语言可以自由地重用存储,因此
ptr
可能现在指向该
B
值的内存,这破坏了该语言的类型安全性(使用当前的编译器,只能保证将其重用用于小值,但重点仍然存在)。

更改存储在接口中的值的唯一安全方法是将值复制出来,然后分配回修改后的版本。例如:

a := x.(A)a.Str = "Bye"x = a

reflect
包装反映了这些限制,因此
reflect.Value
代表被视为只读动态值的字段。

您可以在第一个示例中设置字段,因为的动态值

z
*A
指针而不是结构本身:这意味着可以修改引用的结构。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号