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

你能在 Go 中获取接口内的值的地址吗?

Barbara Streisand
发布: 2024-10-31 02:53:31
原创
998 人浏览过

 Can You Take the Address of a Value Inside an Interface in Go?

获取接口内值的地址

在 Go 编程语言的上下文中,接口充当契约,定义集合类型必须实现的方法。当一个值被分配给一个接口时,它被包装在一个接口值中。然而,接口值本身并不存储实际值,而是保存对它的引用。

因此,尝试使用 & 运算符获取接口内值的地址将导致错误,如下所示在下面的代码片段中:

<code class="go">import "container/list"

type retry struct{}

var el = list.Element{Value: retry{}}

p := &el.Value.(retry) // Compilation error: cannot take the address of el.Value.(retry)</code>
登录后复制

这个错误源于这样一个事实:接口内部的值归接口值本身所有,当为接口分配新值时,其存储可能会被重用。修改获取地址处的值会直接影响接口值,这是不可取的,并且可能会导致意外行为。

为了解决这种情况,可以使用替代方法:

存储指针而不是值:
可以存储指向这些结构的指针,而不是直接在接口中存储结构值。这可以确保即使接口值发生变化,指针仍然有效。

使用元素引用:
另一个选项是将 *list.Element 值作为对所包含结构的引用传递。这有效地提供了对结构体值的间接访问,而不违反 Go 的类型安全。

以上是你能在 Go 中获取接口内的值的地址吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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