不知何故,我在对象的 for 循环中附加了一个指向列表而不是对象的指针,因此最后整个切片由同一对象多次组成。我只是不知道如何解决这个问题。
漫漫长路
我仍然很难在 go 中找出指针。我昨天发布了一个问题并得到了一些帮助,但现在我在同一段代码中遇到了一个略有不同的问题。
我有工作gocql,并cqlr去包,试图咬一小对象映射为我的卡桑德拉查询。本质上,我遇到的问题是我将似乎是指向对象的指针而不是 obj 的新实例附加到数组。我该如何解决?我试过在前面添加&和*,value但这似乎不起作用。我该如何解决这些问题?&根据他们的文档,绑定函数需要一个。
代码
type Query struct {
query string
values interface{}
attempts int
maxAttempts int
structType reflect.Type
}
func (query Query) RetryingQuery() (results []interface{}) {
var q *gocql.Query
if query.values != nil {
q = c.Session.Query(query.query, query.values)
} else {
q = c.Session.Query(query.query)
}
bindQuery := cqlr.BindQuery(q)
value := reflect.New(query.structType).Interface()
for bindQuery.Scan(value) {
fmt.Println(value)
results = append(results, value)
}
return
}
文档要求var value type然后绑定你会通过&value。我引用了下面的文档。
var t Tweet
var s []Tweet
for b.Scan(&t) {
// Application specific code goes here
append(s, t)
}
问题是我不能直接var value query.structType定义它的类型然后将它的引用传递给bindQuery.Scan().
印什么
&{result1 x86_64 24 3.2.0-74-generic Linux}
&{result2 x86_64 24 3.19.0-25-generic Linux}
&{result3 x86_64 4 3.13.0-48-generic Linux}
&{result4 x86_64 2 3.13.0-62-generic Linux}
&{result5 x86_64 4 3.13.0-48-generic Linux}
切片中有什么
剧透,result5一遍又一遍地重复。我知道我只是将指向同一对象的指针附加到列表中,并且每次循环迭代对象都会更改,并且会将切片中的所有结果更改为该新对象。我只是不知道如何解决它。
[{"hostname":"result5","machine":"x86_64","num_cpus":4,"release":"3.13.0-48-generic","sysname":"Linux"},{"hostname":"result5","machine":"x86_64","num_cpus":4,"release":"3.13.0-48-generic","sysname":"Linux"},{"hostname":"result5","machine":"x86_64","num_cpus":4,"release":"3.13.0-48-generic","sysname":"Linux"},{"hostname":"result5","machine":"x86_64","num_cpus":4,"release":"3.13.0-48-generic","sysname":"Linux"},{"hostname":"result5","machine":"x86_64","num_cpus":4,"release":"3.13.0-48-generic","sysname":"Linux"}]
HUH函数
相关分类