Я пытался повторно использовать подготовленный запрос в параллельных вызовах.
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 с соответствующим вызовом.
Вместо этого несколько пакетов повторно связываются.
Что-то не так в этом подходе? Не уверен, почему pks привязаны к соответствующим вызовам.
Запрос создается один раз в основном и вводится для всех последующих вызовов.