根据反映文档reflect.Value.MapIndex()
应该返回reflect.Value
,它表示存储在地图特定键上的数据的值。所以我的理解是,以下两个表达应该是相同的。在第一种情况下,我们从MapIndex()
得到结果。在第二个我们从MapIndex()
得到它的底层数据的结果,然后在那做一个reflect.ValueOf()
。reflect.Value.MapIndex()返回与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
Whups和你在我打字的时候回答! :) –