Casting接口可以反映数组类型

时间:2016-04-15 03:05:17

标签: go

下面的代码是Python脚本的改编。当然,它没有编译,这有几个原因。

我正在努力了解如何修复它以便它能够提供正确的结果。

特别是:

  1. 我想表示此类型的类型(float64)或array,所以我天真地使用[]interface但是然后传递数组赢了'工作。我明白我可以用我的数组深度复制一个接口数组,但这是唯一的方法吗?

  2. 反射检查有效(有点),但后来我又回到了[]interface的界面,并且没有工作。

  3. 一种更简单的方法是传递[]float,但我也想让代码通用(oops!;-)足以接受[][]floats并递归下降与比较。

  4. 我完全偏离了吗?

    func assertArrayEquals(first []interface{}, second []interface{}) bool {
        if len(first) != len(second) {
            return false
        }
        for i := range first {
            if reflect.ValueOf(first[i]).Kind() == reflect.Array {
                assertArrayEquals([]interface{}(first[i]), []interface{}(second[i]))
            } else if second[i] != first[i] {
                return false
            }
        }
        return true
    }
    
    func main() {
        assertArrayEquals([]float64{[]float64{0, 1}, []float64{0, 1}}, []float64{[]float64{0, 1}, []float64{0, 1}})
    }
    

1 个答案:

答案 0 :(得分:1)

这是实现assertArrayEquals的一种方法:

func assertArrayEquals(first interface{}, second interface{}) bool {
    return reflect.DeepEqual(first, second)
}

playground example

相关问题