Код ниже - это адаптация скрипта Python. Конечно, он не компилируется, и для этого есть несколько причин.Интерфейс литья может отражать типы массивов
Я изо всех сил пытаюсь понять, как это можно исправить, чтобы он дал правильный результат.
В частности:
Я хочу, чтобы представлять либо тип (
float64
) илиarray
этого типа, так что я по наивности с помощью[]interface
, но затем передать массив не будет работать. Я понимаю, что могу глубоко скопировать интерфейсный массив с моим массивом, но это единственный способ?Работа проверки отражения (kinda), но затем я вернусь к литье интерфейса к
[]interface
, и это не сработает.Простым способом было бы пройти
[]float
, но я также хочу сделать код generic (oops! ;-) достаточно, чтобы принять[][]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}})
}
Спасибо. Я полностью пропустил эту функцию. – Laurent