当我的程序中有并发查询时,如何使用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。

MatchExpectationsInOrder方法正是在这种情况下禁用顺序检查。

最新更新