登录
首页 >  Golang >  Go问答

获取接口内的值地址

来源:Golang技术栈

时间:2023-03-30 11:26:31 102浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《获取接口内的值地址》,聊聊golang,希望可以帮助到正在努力赚钱的你。

问题内容

如何获取接口内的值的地址?

我有一个存储在接口中的结构,在 list.List 元素中:

import "container/list"
type retry struct{}
p := &el.Value.(retry)

但我明白了:

cannot take the address of el.Value.(retry)

这是怎么回事?既然结构体存储在接口中,为什么我不能得到指向它的指针呢?

正确答案

要理解为什么这是不可能的,考虑一下接口变量实际上是什么是有帮助的。接口值占用两个词,第一个描述包含值的类型,第二个(a)保存包含的值(如果它适合词)或(b)指向存储值的指针(如果该值不适合一个单词)。

需要注意的重要事项是(1)包含的值属于接口变量,以及(2)当为变量分配新值时,可以重用该值的存储。知道这一点,请考虑以下代码:

var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}

现在整数的存储已被重新用于保存指针,并且*p现在是该指针的整数表示。你可以看到它是如何破坏类型系统的,所以 Go 没有提供这样做的方法(除了使用unsafe包之外)。

如果您需要指向要存储在列表中的结构的指针,那么一种选择是存储指向列表中结构的指针,而不是直接存储结构值。或者,您可以将*list.Element值作为对包含结构的引用传递。

终于介绍完啦!小伙伴们,这篇关于《获取接口内的值地址》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>