为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取接口引用的对象的地址

如何获取接口引用的对象的地址

Go
森林海 2022-06-27 17:13:42
我有两个接口对象,我想相互比较。我不仅想比较它们的值是否相同,我还想知道这两个接口是否引用了同一个对象,或者它们是否引用了两个具有相同值的不同对象。有没有办法从接口对象中提取接口引用的地址?然后我可以比较这两个地址来知道这两个接口是否引用了同一个对象。
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

如果两个接口都有指针值,那么您可以简单地比较它们:


func cmp(v1, v2 interface{}) bool {

   return v1==v2

}


func  main() {

   a:=1

   b:=1

   c:=&a

   cmp(&a,&b) // false

   cmp(a, b) // true, compare values

   cmp(c, &a) // true

}


查看完整回答
反对 回复 2022-06-27
?
SMILET

TA贡献1796条经验 获得超4个赞

这里要小心。

两个不同的接口值永远不能“引用”“同一对象”,因为接口值始终包含您包装在接口值中的值的副本。变量标识(您的“相同对象”)将是“相等地址”,对于包装在接口值中的值未定义,因为这些包装值不可寻址。所以明确拒绝你的问题。

但当然,如果指针类型满足接口,您可以将指向您的值的指针存储在接口值中。

最好避免谈论“对象”和“引用”。Go 具有某些类型的值。有些值是可寻址的。您可以将可寻址值的地址存储在适当类型的指针变量中。


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号