即使我查看了Go文档和示例,也无法真正找到答案。是否可以动态地将接口转换回其原始类型?我知道我可以做这样的事情:
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()时将交出该类型(第二个参数是接口)。是否可以使用反射来实现?
在不知道编译时是什么类型的情况下,不能从接口声明类型,但是可以通过反射从接口设置值。这是一个没有任何错误检查的示例,当任何参数不匹配时,该错误都会发生:
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]))
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句