gocql bind не работает в случае одновременных вызовов - PullRequest
0 голосов
/ 06 августа 2020

Я пытался повторно использовать подготовленный запрос в параллельных вызовах.

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 привязаны к соответствующим вызовам.

Запрос создается один раз в основном и вводится для всех последующих вызовов.

...