2016-11-09 12 views
3

Goのドキュメントと例を参照しても、私は本当にこれに対する答えを見つけることができませんでした。インタフェースを元のタイプに動的にキャストすることは可能ですか?私はこのような何かをすることができることを知っています:Golang:元のタイプに戻るキャストインターフェイス

var myint int = 5 
var myinterface interface{} 
myinterface = myint 
recovered, _ := myinterface.(int) 
fmt.Println(recovered) 

ここで私はタイプを知っています。単一マップ内で何かを保存するために

// put/pop writes/read to/from a map[string]interface{} 
var myint int = 5 
put("key" myint) 
pop("key", &myint) // this should also work for objects or any other type 

ことが可能だろうによってこのように:私は、未知の種類(インタフェース)のマップを持っており、このような反射を利用して戻ってそれらをキャストしたいと思います。 pop()(2番目の引数はインタフェース)を呼び出すときに、型がユーザによって渡されます。反射を使ってこれを実現することは可能でしょうか?

答えて

4

インターフェイスからタイプをアサートすることはできません。そのタイプはコンパイル時にはわかりませんが、リフレクションによってインターフェイスから値を設定できます。ここで任意のパラメータが一致しない場合にパニック状態にされ、すべてのエラーチェックなし例:私が探していたまさに

var m = map[string]interface{}{} 

func put(k string, v interface{}) { 
    m[k] = v 
} 

func pop(k string, o interface{}) { 
    reflect.ValueOf(o).Elem().Set(reflect.ValueOf(m[k])) 
} 

https://play.golang.org/p/ORcKhtU_3O

+0

。ありがとうございました :) – Kugel

関連する問題