第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在gorm中為長時間運行的查詢設(shè)置超時

如何在gorm中為長時間運行的查詢設(shè)置超時

Go
繁華開滿天機(jī) 2022-06-21 10:53:45
在運行長查詢時,有沒有辦法可以將 gorm 設(shè)置為在可配置的時間段后超時?我正在使用 mssql。我瀏覽了文檔,還沒有找到方法。
查看完整描述

2 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗 獲得超11個贊

這段代碼似乎對我有用,而且很干凈。我猜只是使用交易。


    //Gorm query below

query = query.Where(whereClause)

//Set up Timeout

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

defer cancel()

var x sql.TxOptions

db := query.BeginTx(ctx, &x)

defer db.Commit()

// Execute the query

if err := db.Find(*results).Error; err != nil {

    return err

}


查看完整回答
反對 回復(fù) 2022-06-21
?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗 獲得超8個贊

目前,gorm 似乎沒有context.Context像 eg那樣實現(xiàn)任何接受作為參數(shù) a 的查詢QueryRowContext。

您可以創(chuàng)建一種解決方法并使用 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

    }

}

然后在您的上層函數(shù)中,無論它是什么,您都可以創(chuàng)建一個上下文并將其傳遞給MyQueryFunction. 如果查詢超過了您設(shè)置的時間,則會引發(fā)錯誤,您應(yīng)該(必須)檢查它。


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)

}

當(dāng)然,這只是一個例子,沒有考慮很多用例,必須首選框架內(nèi)的正確實現(xiàn)。


查看完整回答
反對 回復(fù) 2022-06-21
  • 2 回答
  • 0 關(guān)注
  • 688 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號