2013-06-23 10 views

答えて

10

OK]を、私はそれを

reflect.Valueを発見interface{}

+15

参照。実際のタイプに変換するにはどうすればよいですか? – Matt

+0

Goでは@Mattはできません。あなたは安全でないか手動のタイプ変換なしでジェネリックを再発明することはできません(少なくともGo 1で)。 –

+0

https://github.com/bpgriner/golang-reflection-custom-type – bpgriner

21
concreteCat,_ := reflect.ValueOf(cat).Interface().(Cat) 

に変換する機能Interface()を有し、それは{}をインターフェースに変換http://golang.org/doc/articles/laws_of_reflection.html キツネ例

type MyInt int 
var x MyInt = 7 
v := reflect.ValueOf(x) 
y := v.Interface().(float64) // y will have type float64. 
fmt.Println(y) 
+9

実際にそのタイプの知識がある場合は、それです。ブラインドタイプのアサーションを適用したい場合は、実際に可能であるかどうかはわかりません。 – Taye

+0

1つの解決策は、そのままの状態で 'reflect.Value'をそのままにして、通常の構造体に変換することなく、リフレクトパッケージを使用してすべての計算を移動することです。これは[gongular](https://github.com/mustafaakin/gongular/blob/master/handler.go#L101)で確認できます。関連:https://play.golang.org/p/Ok_q3lx490h – Xeoncross