我有两个接口对象,我想相互比较。我不仅想比较它们的值是否相同,我还想知道这两个接口是否引用了同一个对象,或者它们是否引用了两个具有相同值的不同对象。有没有办法从接口对象中提取接口引用的地址?然后我可以比较这两个地址来知道这两个接口是否引用了同一个对象。
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
}

SMILET
TA贡献1796条经验 获得超4个赞
这里要小心。
两个不同的接口值永远不能“引用”“同一对象”,因为接口值始终包含您包装在接口值中的值的副本。变量标识(您的“相同对象”)将是“相等地址”,对于包装在接口值中的值未定义,因为这些包装值不可寻址。所以明确拒绝你的问题。
但当然,如果指针类型满足接口,您可以将指向您的值的指针存储在接口值中。
最好避免谈论“对象”和“引用”。Go 具有某些类型的值。有些值是可寻址的。您可以将可寻址值的地址存储在适当类型的指针变量中。
- 2 回答
- 0 关注
- 223 浏览
添加回答
举报
0/150
提交
取消