DeepEqual [] interface {}

时间:2018-03-06 14:28:02

标签: go reflection 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")
}

我期待DeepEqual太多了吗?阅读文档后,以下语句强化了我的假设:它应该起作用:

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

您将[]interface{}[]string进行比较,if reflect.DeepEqual(value.([]interface{}), targetValue) { 永远不会相等。

targetValue

[]string类型的var targetValue interface{} = []string{"a", "c"} 进行比较:

nmap -v -n  -sP -iL <IP-list-file.txt>