web-dev-qa-db-ja.com

Reflect.Valueをその型にキャストする方法は?

Reflect.Valueをその型にキャストする方法は?

type Cat struct { 
    Age int
}

cat := reflect.ValueOf(obj)
fmt.Println(cat.Type()) // Cat

fmt.Println(Cat(cat).Age) // doesn't compile
fmt.Println((cat.(Cat)).Age) // same

ありがとう!

25
Alex

わかった、見つけた

_reflect.Value_には、_interface{}_に変換する関数Interface()があります

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

http://golang.org/doc/articles/laws_of_reflection.html foxの例を参照してください

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