0

查看以下 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")
}

我是不是期望太高了DeepEqual?阅读文档,以下陈述强化了我认为它应该有效的假设:

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

我在这里想念什么?

4

1 回答 1

4

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

if reflect.DeepEqual(value.([]interface{}), targetValue) {

与之比较targetValue的是类型[]string

var targetValue interface{} = []string{"a", "c"}
于 2018-03-06T14:36:49.827 回答