DeepEqual []interface{}
Глядя на следующий код Голанга:
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
? Читая документацию, следующие утверждения подтверждают мое предположение, что это должно работать:
- Значения массива глубоко равны, когда их соответствующие элементы глубоко равны.
- Значения интерфейса глубоко равны, если они содержат глубоко равные конкретные значения.
- Значения среза глубоко равны, когда (...) или их соответствующие элементы (до длины) глубоко равны.
Что мне здесь не хватает?
1 ответ
Вы сравниваете []interface{}
против []string
, который никогда не должен быть равным.
if reflect.DeepEqual(value.([]interface{}), targetValue) {
по сравнению с targetValue
который имеет тип []string
:
var targetValue interface{} = []string{"a", "c"}