1

在我的控制器开始时,我创建了一个超时的上下文,如下所示:

ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()

然后我在每个数据库请求中使用这个上下文,如下所示:

QueryRowContext(ctx, query, ...args) // where ctx is context

但是,当我加载我的测试程序时,我注意到我的一些请求返回了 error "pq: canceling statement due to user request"。我提出的请求越多,我得到的错误就越多。

但是,如果我不使用带超时的上下文,而是使用 just context.Background(),那么无论请求的数量如何,我都不会出错。

每个请求大约需要 50 毫秒,因此不会发生超时。我尝试了取消上下文,context.WithCancel(context.Background())我也得到了这些错误。

发生这些错误的原因可能是什么?

// create context to cancel working if 10 seconds passed
ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()


// parses queries
var response []byte
request := model.GetProductByBarcodeRequest{}
barcode := r.URL.Query().Get("barcode")
storeID := r.URL.Query().Get("store_id")
transactionType := r.URL.Query().Get("type")


request.Barcode = &barcode
request.StoreID = &storeID
request.Type = &transactionType

// processing
result, err := model.GetProductByBarcode(ctx, request)
response = controller.ToJson(result, err)

// writing response to user
w.Write(response)
4

0 回答 0