リフレクトドキュメントによると、マップの特定のキーに格納されているデータの値を表すreflect.Value.MapIndex()
aを返す必要があります。reflect.Value
したがって、私の理解では、次の2つの式は同一である必要があります。最初のケースでは、から結果を取得していMapIndex()
ます。MapIndex()
2番目の例では、基礎となるデータを取得し、それに対して実行することで結果を取得reflect.ValueOf()
しています。
reflect.ValueOf(map).MapIndex("Key")
reflect.ValueOf(reflect.ValueOf(map).MapIndex("Key").Interface())
なぜ追加reflect.ValueOf()
が必要なのですか?
サンプルコード:
package main
import "fmt"
import "reflect"
func main() {
test := map[string]interface{}{"First": "firstValue"}
Pass(test)
}
func Pass(d interface{}) {
mydata := reflect.ValueOf(d).MapIndex(reflect.ValueOf("First"))
fmt.Printf("Value: %+v \n", mydata.Interface())
fmt.Printf("Kind: %+v \n", mydata.Kind())
fmt.Printf("Kind2: %+v \n", reflect.ValueOf(mydata.Interface()).Kind())
}
プレイする:http://play.golang.org/p/TG4SzrtTf0