首页 > 后端开发 > Golang > 正文

为什么无法获取 Go 接口中存储的值的地址?

Linda Hamilton
发布: 2024-11-02 09:16:02
原创
882 人浏览过

 Why Can't I Get the Address of a Value Stored in a Go Interface?

在接口内寻址值

尝试获取存储在接口中的值的地址通常会导致错误,例如“cannot获取 el.Value 的地址。(重试)”。要理解这一限制,我们必须检查接口变量的本质。

接口变量由两部分组成:一部分描述所包含值的类型,另一部分直接存储值或保存指向其值的指针贮存。存储在接口中的值由接口变量本身拥有。此外,当接口被分配新值时,该值的存储可以被重用。

例如:

<code class="go">var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}</code>
登录后复制

在这种情况下,用于保存整数的存储是重新用于保存指针,将 *p 处的值呈现为新指针的无效整数表示形式。这种行为很容易破坏类型系统,因此,Go 不提供直接的方法来获取接口值的地址(除了使用不安全的包)。

如果您需要指向存储在列表,请考虑存储指向结构本身的指针,而不是直接存储结构。或者,您可以使用 *list.Element 值作为对所包含结构的引用。

以上是为什么无法获取 Go 接口中存储的值的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!