1 回答
TA贡献1883条经验 获得超3个赞
您的代码的问题在于它在从通道读取数据之前阻塞了执行流程。当您调用RunQueryfromgetdataList时,RunQuery尝试通过 channel 发送数据ch。但是,没有读取任何内容,ch因为要从中读取的代码位于其中,getdataList并且位于对RunQuery.
因此,RunQuery永远不会返回并且要从中读取的 goroutinech永远不会触发。要修复,您也可以尝试RunQuery作为 goroutine 运行:
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
}
}
}()
}
您的代码中还有另一个问题。你永远不会关闭ch。这可能会导致死锁。最理想的地方似乎是RunQuery:
func RunQuery (ch chan interface{}, query string, param interface{}) {
// ...
ch <- tableData
close(ch)
}
- 1 回答
- 0 关注
- 268 浏览
添加回答
举报
