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

我有两个接口对象,我想相互比较。我不仅想比较它们的值是否相同,我还想知道这两个接口是否引用了同一个对象,或者它们是否引用了两个具有相同值的不同对象。

有没有办法从接口对象中提取接口引用的地址?然后我可以比较这两个地址来知道这两个接口是否引用了同一个对象。


森林海
浏览 224回答 2
2回答

侃侃尔雅

如果两个接口都有指针值,那么您可以简单地比较它们: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}

SMILET

这里要小心。两个不同的接口值永远不能“引用”“同一对象”,因为接口值始终包含您包装在接口值中的值的副本。变量标识(您的“相同对象”)将是“相等地址”,对于包装在接口值中的值未定义,因为这些包装值不可寻址。所以明确拒绝你的问题。但当然,如果指针类型满足接口,您可以将指向您的值的指针存储在接口值中。最好避免谈论“对象”和“引用”。Go 具有某些类型的值。有些值是可寻址的。您可以将可寻址值的地址存储在适当类型的指针变量中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go