【发布时间】:2018-04-04 15:40:20
【问题描述】:
让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))
你遇到过这个问题吗?你做了什么?
【问题讨论】:
-
出于好奇,您想用这个解决什么问题?
-
您的反射行获取一个接口,取消引用它,获取它的地址,然后返回您开始使用的相同接口。我不明白那应该是什么目标
-
看起来您正试图将多态性硬塞到不支持它的语言上,这有点代码味道。也许您的类型系统不是以非常类似于 go 的方式设计的?
-
这通常是对数据库进行 Get 操作的包装器。
value是我从数据库中得到的,valuePtr是用户给出的。我假设用户知道他想要的值的类型。 -
@TimothyJones 你应该是对的,