0

我一直在尝试在并发调用中重用准备好的查询。

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 中创建一次,并为所有进一步的调用注入。

4

0 回答 0