幕布斯7119047
目前,gorm 似乎没有context.Context像 eg那样实现任何接受作为参数 a 的查询QueryRowContext。您可以创建一种解决方法并使用 Context 使您的查询“过期”。type QueryResponse struct { MyResult *MyResult Error error}func queryHelper(ctx context.Context) <- chan *QueryResponse { chResult := make(chan *QueryResponse, 1) go func() { //your query here //... //blah blah check stuff do whatever you want //err is an error that comes from the query code if err != nil { chResult <- &QueryResponse{nil, err} return } chResult <- &QueryResponse{queryResponse, nil} } () return chResult}func MyQueryFunction(ctx context.Context) (*MyResult, error) { select { case <-ctx.Done(): return nil, fmt.Errorf("context timeout, query out of time") case res := <-queryHelper(ctx): return res.MyResult, res.Error }}然后在您的上层函数中,无论它是什么,您都可以创建一个上下文并将其传递给MyQueryFunction. 如果查询超过了您设置的时间,则会引发错误,您应该(必须)检查它。ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)defer cancel()res, err := MyQueryFunction(ctx)if err != nil { fmt.Printf("err %v", err)} else { fmt.Printf("res %v", res)}当然,这只是一个例子,没有考虑很多用例,必须首选框架内的正确实现。