2013-06-23 1 views

ответ

10

Хорошо, я нашел, что это

reflect.Value имеет функцию Interface(), который преобразует его в 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) 

см 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

Одно из решений заключается в том, чтобы оставить 'reflect.Value' as-is и просто переместить все ваши вычисления на использование пакета отражения без надежды когда-либо преобразовываться обратно в регулярную структуру. Это можно увидеть в [gongular] (https://github.com/mustafaakin/gongular/blob/master/handler.go#L101). Связано: https://play.golang.org/p/Ok_q3lx490h – Xeoncross