【发布时间】:2016-07-11 03:58:45
【问题描述】:
我有一个从数据库返回 Json 的方法,它可以正常工作,但是当我尝试使其并发时,它不会返回任何内容,也不会给出任何错误。例如这是正确工作的方法
func Listing_Expiration(w http.ResponseWriter, r *http.Request) {
db,err := sql.Open("DB_Connect")
if err != nil {
log.Fatal(err)
println(err)
}
var result string
errr := db.QueryRow("select json_build_object('Expiration', array_to_json(array_agg(t))) from (select fullname,ad_end from profiles where id=32)t").Scan(&result)
defer db.Close()
switch {
case errr != nil:
log.Fatal(errr)
}
fmt.Fprintf(w,result)
}
上面的方法正常工作,数据返回到浏览器然后我尝试使这个方法异步
func Listing_Expiration(w http.ResponseWriter, r *http.Request) {
go func(){
db,err := sql.Open("DB_Connect")
if err != nil {
log.Fatal(err)
println(err)
}
var result string
errr := db.QueryRow("select json_build_object('Expiration', array_to_json(array_agg(t))) from (select fullname,ad_end from profiles where id=32)t").Scan(&result)
defer db.Close()
switch {
case errr != nil:
log.Fatal(errr)
}
fmt.Fprintf(w,result)
}()
}
上面的异步没有返回任何东西,我唯一改变的是我在方法中添加了 Go func() ,这样它就是异步的,其他的都是一样的。我检查了一下,数据库返回了相同的内容,只是不知道为什么异步没有将结果打印回浏览器。
【问题讨论】:
标签: go