2013-10-15 11 views

cevap

4

Değişimi:

GetTypeArray(arr []interface{}) 

için:

GetTypeArray(arr interface{}) 

arada, []int bir dizi ama tamsayılar bir dilim değildir.

+3

Bu, olası dizin dışı panik sorununu çözmez. Cevabımı gör. – Mike

+0

@Mike Doğru olduğunuz halde, bu (sorunun çözülmesi için çok özel bir hata içerir) sorusu değildir ve dolayısıyla buradaki kapsam dışıdır. – thwd

+2

Sorunun başlığı "Golang, Go: dizi türünü al" ve bulduğumda aradığım şey buydu. Bunun senin hatan olduğunu ya da onu özlediğini göstermiyorum. Bununla birlikte, ele alınması önemlidir çünkü neredeyse bu kodu, hatayı fark etmeden ya da çözümün yetersiz olduğu gerçeğini fark etmeden kullandım. Sana meydan okumaya çalışmıyorum, sadece önemli olduğunu düşünüyorum. – Mike

18

Dilimi dizine eklediğinizden emin olun - boşsa, bir dizin dışı çalışma zamanı panik olur. Ne olursa olsun, çünkü reflect package's Elem() method gereksiz açıklanmıştır: @ tomwilde en değişikliği uyarınca, argüman arr kesinlikle herhangi bir türde olabilir, o

func GetTypeArray(arr interface{}) reflect.Type { 
     return reflect.TypeOf(arr).Elem() 
} 

Not: Yani

type Type interface { 

    ... 

    // Elem returns a type's element type. 
    // It panics if the type's Kind is not Array, Chan, Map, Ptr, or Slice. 
    Elem() Type 

    ... 
} 

, burada kullanmak istediğiniz ne Bu nedenle, çalışma zamanında GetTypeArray()'u dilim dışı bir değerden geçirmeniz ve paniklemenizden hiçbir şey sizi durdurmuyor.