valuePtrvalue为两个interface{}。知道valuePtrvalue类型的指针,如何在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)

09-11 20:48