Golang:将接口转换回其原始类型

项目符号:

即使我查看了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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将(原始类型)的类型转换回OCaml中的原始类型

如何将interface {}转换回其原始结构?

将反序列化为接口的转换对象恢复为其原始类型

将Unicode字符转换回其原始字符串表示形式

将更改为数字代码的分类变量转换回其原始形式

如何将转换为字符串值的[[String]]转换回原始类型[[String]]?

将数据转换回原始项目

将标签转换回原始编码

我如何将reflect.New的返回值转换回原始类型

.where()无法将数据转换回原始类型时该怎么办

如何将接口{}转换为其基础类型

从 json 文件导入后,将字典的数据转换回其正确的数据类型

大熊猫的行程将列的类型更改为浮动。如何将其转换回原始类型?

Golang:将接口动态转换为类型变量

将Emtpy接口转换为Golang中的等效类型

将GameObject转换回通用类型<T>

将字节数组的golang字符串格式转换回原始字节数组

将数据转换回具有 nan 值的原始维度

如何将String.getBtyes转换回原始String

熊猫将应用结果转换回原始数据框

如何将正弦变换矢量转换回原始格式?

使用可变参数参数将函数转换回原始签名

将字符串转换回原始格式

将数字格式的变量转换回原始格式-PHP

将递归公式转换回原始的显式公式?

如何将mongodb go驱动程序的native.Timestamp类型转换回Golang time.Time类型?

如何将初始化接口从父接口转换回子接口

如何将System.Reflection.PropertyInfo对象转换为其原始对象类型

以匿名类型作为泛型参数的泛型类型实例,如何正确转换回原始类型?