Equal 与 DeepEqual

问题描述 投票:0回答:1

为什么Equal和DeepEqual有区别?

s1 := "abc"
s2 := "abc"

sv1 := reflect.ValueOf(s1)
sv2 := reflect.ValueOf(s2)

fmt.Println(sv1.Equal(sv2))
fmt.Println(reflect.DeepEqual(sv1, sv2))

第一个打印 true,第二个打印 false。

go reflection equality
1个回答
0
投票

我认为你已经在元级 foo 上走了很远了。

s1 := "abc"
s2 := "abc"

sv1 := reflect.ValueOf(s1)
sv2 := reflect.ValueOf(s2)

fmt.Println(s1 == s2)
fmt.Println(reflect.DeepEqual(s1, s2))

fmt.Println(sv1 == sv2)
fmt.Println(sv1.Equal(sv2))
fmt.Println(reflect.DeepEqual(sv1, sv2))

给出:

true
true
false
true
false

深度等于增加了递归性,正确的,并且在检查具体类型时可以正确工作。但

reflect.Value
对象具有不同的表示形式。

您有什么具体原因要查询

reflect.Value
对象吗?

无论如何,希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.