令valuePtr
和value
为两个interface{}
。知道valuePtr
是value
类型的指针,如何在valuePtr
上设置value
点?
我目前使用的“技巧”可用于reflect
包和类型开关:
switch value.(type) {
case string:
ptr := reflect.ValueOf(valuePtr).Elem().Addr().Interface().(*string)
*ptr = value.(string)
case ...:
[...]
}
对于每种可以赋予函数的类型,这都需要一种情况。但是,我正在使用
interface{}
使事情变得通用。因此,该技术最终将导致出现数十种类型的情况。我正在尝试做的事情是这样的:
ptr := valuePtr.(*type(value))
你遇到这个问题了吗?你做了什么?
最佳答案
根据问题中的代码,您的目标似乎是将一个指针元素设置为一个值。使用此代码:
reflect.ValueOf(valuePtr).Elem().Set(reflect.ValueOf(value))
playground example
顺便说一句,可以将代码
ptr := reflect.ValueOf(valuePtr).Elem().Addr().Interface().(*string)
更直接编写为ptr := valuePtr.(*string)
。