我正在尝试向数据库发出多个请求,我发现同步执行这些请求非常慢,并且在等待每个请求完成时响应时间呈指数增长,这就是我到目前为止所拥有的:
var wg sync.WaitGroup
dbUsername := make(chan string, 1)
dbEmail := make(chan string, 1)
wg.Add(2)
go func(username chan string, waiter sync.WaitGroup) {
defer waiter.Done()
err = db.QueryRow("SELECT username FROM user WHERE username = ?", vals.Get("username")).Scan(&result)
if err != nil {
log.Println(err)
}
}(dbUsername, wg)
go func(email chan string, waiter sync.WaitGroup) {
defer waiter.Done()
err = db.QueryRow("SELECT email FROM user WHERE email = ?", vals.Get("email")).Scan(&result)
if err != nil {
log.Println(err)
}
}(dbEmail, wg)
wg.Wait()
if <-dbUsername != "" {
formErrors = append(formErrors, "Username has already been taken.")
}
if <-dbEmail != "" {
formErrors = append(formErrors, "Email has already been taken.")
}
但它似乎无法正常工作,我已经按照WaitGroup示例进行了操作,但它似乎仍然存在wg.Wait(),我不确定为什么。有没有更漂亮的方法来做到这一点,还是我模拟的正常?
还有一个小问题:
是否可以声明一个缓冲通道,var例如var blah chan string 1
红糖糍粑
相关分类