Golang界面&真实的类型

时间:2018-04-04 15:40:20

标签: pointers go interface

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

你有没有遇到过这个问题?你做了什么?

1 个答案:

答案 0 :(得分:1)

根据问题中的代码,您的目标似乎是将指针元素设置为值。使用此代码:

reflect.ValueOf(valuePtr).Elem().Set(reflect.ValueOf(value))

playground example

另外,代码ptr := reflect.ValueOf(valuePtr).Elem().Addr().Interface().(*string)可以更直接地编写为ptr := valuePtr.(*string)