2016-04-15 60 views
0

下面的代碼是Python腳本的適配。當然,它不會編譯,這有幾個原因。鑄造接口可以在陣列類型上反射

我很努力的去理解它是如何修復它,所以它給出了正確的結果。

特別是:

  1. 我想,所以我天真地使用[]interface但隨後傳遞數組將不起作用代表任一類型(float64)或這種類型的array。我知道我可以深入複製一個接口數組與我的數組,但它是唯一的方法?

  2. 反射檢查工作(有點)但我回來鑄造接口到[]interface,這是行不通的。

  3. 更簡單的方法是通過[]float,但我也想使代碼通用(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}}) 
} 

回答

1

這裏的實施assertArrayEquals一種方法:

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

playground example

+0

謝謝。我完全錯過了這個功能。 – Laurent