簡體   English   中英

當我的程序中有並發查詢時如何使用 go-sqlmock?

[英]How to use go-sqlmock when I have concurrent query in my program?

sqlmock需要依次匹配SQL。 但是,如果我的代碼中有並發查詢,就像這樣:

    condition1 := make(map[string]string)
    condition2 := make(map[string]string)

    var count int64
    var user User
    var task Task

    var wg sync.WaitGroup
    wg.Add(3)

    wgDone := make(chan interface{})
    errCh := make(chan error)

    go func(wg *sync.WaitGroup) {
        defer wg.Done()

        err := conn.Where(condition1).Find(&user).Error
        if err != nil {
            errCh <- err
        }
    }(&wg)

    go func(wg *sync.WaitGroup) {
        defer wg.Done()

        err := conn.Where(condition2).Find(&task).Error
        if err != nil {
            errCh <- err
        }
    }(&wg)

    go func(wg *sync.WaitGroup) {
        defer wg.Done()

        err := conn.Count(&count).Error
        if err != nil {
            errCh <- err
        }
    }(&wg)
    
    go func() {
        wg.Wait()
        close(wgDone)
    }()

    select {
    case err := <-errCh:
        return err
    case <-wgDone:
        break
    }
    
    ...

據說我們無法知道SQL的執行順序。 所以我不知道如何使用sqlmock正確匹配sql。

MatchExpectationsInOrder方法完全禁用這種情況下的順序檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM