DeepEqual []接口{}

Nat*_*n H 1 reflection go deepequals

看下面的golang代码:

b := []byte(`["a", "b"]`)
var value interface{}
json.Unmarshal(b, &value)
fmt.Println(value)                 // Print [a b]
fmt.Println(reflect.TypeOf(value)) //Print []interface {}
var targetValue interface{} = []string{"a", "b"}
if reflect.DeepEqual(value.([]interface{}), targetValue) {
    t.Error("please be equal")
}
Run Code Online (Sandbox Code Playgroud)

是我期待太多了吗DeepEqual?阅读文档后,以下陈述强化了我的假设:它应该有效:

  • 当数组值对应的元素深度相等时,数组值深度相等。
  • 如果界面值具有深度相等的具体值,则它们是深度相等的。
  • 当 (...) 或其对应元素(直到长度)深度相等时,切片值深度相等。

我在这里缺少什么?

Fli*_*mzy 5

您正在比较 a[]interface{}[]string,它永远不应该相等。

if reflect.DeepEqual(value.([]interface{}), targetValue) {
Run Code Online (Sandbox Code Playgroud)

targetValue与类型比较[]string

var targetValue interface{} = []string{"a", "c"}
Run Code Online (Sandbox Code Playgroud)

  • 在您的具体情况下,简单的方法是:`var targetValue interface{} = []interface{}{"a", "b"}` (2认同)