Golang:将界面转换回原始类型
发布时间:2020-12-16 09:26:53 所属栏目:大数据 来源:网络整理
导读:即使我查阅了Go文档和示例,我也无法找到答案.是否可以动态地将接口??转换回其原始类型?我知道我可以这样做: var myint int = 5var myinterface interface{}myinterface = myintrecovered,_ := myinterface.(int)fmt.Println(recovered) 但在这里我知道这种
即使我查阅了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])) } https://play.golang.org/p/ORcKhtU_3O (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |