gpt4 book ai didi

戈朗 : cast interface back to its original type

转载 作者:IT王子 更新时间:2023-10-29 01:25:53 27 4
gpt4 key购买 nike

即使我查阅了 Go 文档和示例,我也找不到真正的答案。是否可以动态地将接口(interface)​​转换回其原始类型?我知道我可以做这样的事情:

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

但在这里我知道类型。我想要一个未知类型(接口(interface))的映射,并使用反射将它们投回去,如下所示:

// 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

这样就可以在单个 map 中存储任何内容。该类型将由用户在调用 pop() 时提交(第二个参数是接口(interface))。是否可以使用反射来实现这一点?

最佳答案

如果在编译时不知道该类型是什么,则无法从接口(interface)断言类型,但可以通过反射从接口(interface)设置值。这是一个没有任何错误检查的示例,当任何参数不匹配时会出现 panic :

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

关于戈朗 : cast interface back to its original type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com