我一直在尝试在并发调用中重用准备好的查询。
type product struct {
query *gocql.Query
}
type resp struct {
Pk string
Product Product
Err error
}
func (p *product) A() {
...
respFromDB := make(chan resp, len(pks))
for _, pk := range pks {
go p.getAll(pk, resp)
}
}
func (p *product) getAll(pk string, product chan resp) {
var (
err error
prodResp resp
)
prod := Product{}
prodResp = resp{
Pk: pk,
}
err = p.preparedStatement.Bind(gtin13).Scan(&prod.Pk,...)
if err != nil {
prodResp.Err = err
product <- prodResp
return
}
prodResp.Product = prod
product <- prodResp
}
pks 被传递给 getAll 函数,但 Bind 函数似乎没有将每个 pk 绑定到相应的调用。
相反,一些 pk 被反复绑定。
这种方法有问题吗?不知道为什么 pks 被绑定到相应的调用。
Query 在 main 中创建一次,并为所有进一步的调用注入。