我的扫描未更新其目标变量。我有点得到它的工作:扫描不起作用
ValueName := reflect.New(reflect.ValueOf(value).Elem().Type())
但我不认为它是按我想要的方式工作。
func (self LightweightQuery) Execute(incrementedValue interface{}) {
existingObj := reflect.New(reflect.ValueOf(incrementedValue).Elem().Type())
if session, err := connection.GetRandomSession(); err != nil {
panic(err)
} else {
// buildSelect just generates a select query, I have test the query and it comes back with results.
query := session.Query(self.buildSelect(incrementedValue))
bindQuery := cqlr.BindQuery(query)
logger.Error("Existing obj ", existingObj)
for bindQuery.Scan(&existingObj) {
logger.Error("Existing obj ", existingObj)
....
}
}
}
两个日志消息是完全相同的Existing obj &{ 0 0 0 0 0 0 0 0 0 0 0 0}
(空格是字符串字段)。这是因为大量使用反射来生成一个新的对象?在他们的文档中,它说我应该使用var ValueName type
来定义我的目的地,但我似乎无法用反射来做到这一点。我意识到这可能是愚蠢的,但也许甚至只是指向我进一步调试的方向,这将是伟大的。我的Go技能非常缺乏!
我接受任何类型“incrementedValue”的值,我只是试图创建一个未初始化的新变量,以提供给'bindQuery.Scan()'。我想要第二个,因为我经过并比较所有的领域。我没有测试过你发布的内容,但我想详细说明为什么我正在尝试做我自己的事情。实质上,最终目标是从数据库中获取对象,与递增的值进行比较,然后使用两者之间的更改更新数据库。相当简单,直到你想使它真正动态。 – electrometro
@electrometro然后我的'Execute2()'和'Execute3()'对你来说可能是可行的。在我的答案结尾处还包含一个链接,用于在[Go Playground]上尝试我的代码(http://play.golang.org/p/DpuUcN3Af3)。 – icza
第二个例子正是我所需要的。这是一个漫长的夜晚,只要我今天早上看到它很有意义。谢谢! – electrometro