1 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個贊
您的代碼的問題在于它在從通道讀取數(shù)據(jù)之前阻塞了執(zhí)行流程。當(dāng)您調(diào)用RunQueryfromgetdataList時,RunQuery嘗試通過 channel 發(fā)送數(shù)據(jù)ch。但是,沒有讀取任何內(nèi)容,ch因?yàn)橐獜闹凶x取的代碼位于其中,getdataList并且位于對RunQuery.
因此,RunQuery永遠(yuǎn)不會返回并且要從中讀取的 goroutinech永遠(yuǎn)不會觸發(fā)。要修復(fù),您也可以嘗試RunQuery作為 goroutine 運(yùn)行:
func getdataList(id int) {
ch := make(chan interface{})
done := make (chan bool)
// run in a goroutine
go RunQuery(ch,"select id,name, last_name,first_name from persons where id= ?", id)
go func() {
for {
x, ok := <-ch //I am not getting any data in channel here
if ok {
fmt.Println(x)
}else {
fmt.Println("done")
done <- true
return
}
}
}()
}
您的代碼中還有另一個問題。你永遠(yuǎn)不會關(guān)閉ch。這可能會導(dǎo)致死鎖。最理想的地方似乎是RunQuery:
func RunQuery (ch chan interface{}, query string, param interface{}) {
// ...
ch <- tableData
close(ch)
}
- 1 回答
- 0 關(guān)注
- 229 瀏覽
添加回答
舉報