Pointers Golang接口与实型

Pointers Golang接口与实型,pointers,go,interface,Pointers,Go,Interface,设valuePtr和value是两个接口{}。知道valuePtr是值类型的指针,如何使valuePtr指向值 我目前使用的技巧适用于reflect包和类型开关: switch value.(type) { case string: ptr := reflect.ValueOf(valuePtr).Elem().Addr().Interface().(*string) *ptr = value.(string) case ...: [...] } 这需要为函数指定的每种

设valuePtr和value是两个接口{}。知道valuePtr是值类型的指针,如何使valuePtr指向值

我目前使用的技巧适用于reflect包和类型开关:

switch value.(type) {
case string:
    ptr := reflect.ValueOf(valuePtr).Elem().Addr().Interface().(*string)
    *ptr = value.(string)
case ...:
    [...]
}
这需要为函数指定的每种类型使用一种情况。然而,我正在使用接口{}来实现通用性。因此,这种技术最终将导致一种情况,几十种类型将被列出

我想做的是:

ptr := valuePtr.(*type(value))

你面对过这个问题吗?您做了什么?

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

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

另一方面,代码ptr:=reflect.ValueOfvaluePtr.Elem.Addr.Interface.*字符串可以更直接地写成ptr:=valuePtr.*字符串。

出于好奇,您试图用它解决的问题是什么?您的reflect行获取一个接口,取消引用它,获取它的地址,然后返回与开始时相同的接口。我不明白这样做的目的是什么看起来你想把多态性强加给一种不支持多态性的语言,这有点代码味道。也许您的类型系统设计得不太像go-like?这通常是数据库上Get操作的包装器。value是我从数据库中得到的,valuePtr由用户给出。我假设用户知道他想要的值的类型。@TimothyJones你应该是对的,