当我的程序中有并发查询时,如何使用go-sqlmock?

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。


米琪卡哇伊
浏览 137回答 1
1回答

www说

MatchExpectationsInOrder&nbsp;方法完全禁用此方案的顺序检查。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go