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

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

Linda Hamilton
发布: 2024-10-30 00:20:29
原创
549 人浏览过

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

在接口内寻址值

为了理解为什么获取存储在接口中的值的地址是不可行的,这一点至关重要深入研究接口变量的本质。本质上,接口值由两个部分组成:

  • 类型描述符:这部分指定底层值的类型。
  • 值/指针: 根据值的大小,它要么直接驻留在变量中,要么存在指向其存储的指针。

需要注意的两个关键方面:

  1. 包含的值属于接口变量。
  2. 值存储可以重用以供后续赋值。

考虑以下代码片段:

<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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板