让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))
你有没有遇到过这个问题?你做了什么?
答案 0 :(得分:1)
根据问题中的代码,您的目标似乎是将指针元素设置为值。使用此代码:
reflect.ValueOf(valuePtr).Elem().Set(reflect.ValueOf(value))
另外,代码ptr := reflect.ValueOf(valuePtr).Elem().Addr().Interface().(*string)
可以更直接地编写为ptr := valuePtr.(*string)
。