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"}
Другие вопросы по тегам