我的掃描未更新其目標變量。我有點得到它的工作:掃描不起作用
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