铸造接口可以反映数组类型

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

我正在努力理解如何修复它以提供正确的结果。

特别是:

  1. 我想表示一种类型 ( float64) 或array这种类型的an所以我天真地使用 an[]interface但是然后传递一个数组将不起作用。我知道我可以用我的数组深度复制一个接口数组,但这是唯一的方法吗?

  2. 反射检查有效(有点),但后来我又回到将接口转换为 an[]interface并且不起作用。

  3. 一种更简单的方法是通过,[]float但我也想让代码通用(哎呀!;-)足以接受[][]floats并递归地进行比较。

我完全偏离轨道了吗?

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}})

}


当年话下
浏览 107回答 1
1回答

慕森卡

这是实现 assertArrayEquals 的一种方法:func assertArrayEquals(first interface{}, second interface{}) bool {    return reflect.DeepEqual(first, second)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go