查看以下 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
的期望是否过高?阅读文档,以下陈述强化了我假设它应该有效:
- 当数组值的相应元素深度相等
- 时,数组值是深度相等的。
- 如果接口值具有非常相等的具体值,则它们就是深度相等的。
- 当 (...( 或其相应的元素(直至长度(深度相等时,切片值非常相等。
我在这里错过了什么?
您正在将[]interface{}
与[]string
进行比较,后者永远不应该相等。
if reflect.DeepEqual(value.([]interface{}), targetValue) {
与[]string
型targetValue
相比:
var targetValue interface{} = []string{"a", "c"}