Golang:将界面转换回原始类型

Golang:将界面转换回原始类型,第1张

概述即使我查阅了Go文档和示例,我也无法找到答案.是否可以动态地将接口​​转换回其原始类型?我知道我可以这样做: var myint int = 5var myinterface interface{}myinterface = myintrecovered, _ := myinterface.(int)fmt.Println(recovered) 但在这里我知道这种类型.我想有一个未知类型( 即使我查阅了Go文档和示例,我也无法找到答案.是否可以动态地将接口​​转换回其原始类型?我知道我可以这样做:

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

但在这里我知道这种类型.我想有一个未知类型(接口)的地图,并使用反射将其强制转换,如下所示:

// put/pop writes/read to/from a map[string]interface{}var myint int = 5put("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

总结

以上是内存溢出为你收集整理的Golang:将界面转换回原始类型全部内容,希望文章能够帮你解决Golang:将界面转换回原始类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存