我有疑问。我需要制作一个在后台运行的程序。该程序是在我的数据库中收集和保存数据。我开始这样做:func main() { for { doAll() }}并且一次从所有地址检索数据(“go”函数):func doAll() { rows, err := MySQL.QueryRow("SELECT * FROM `settings`") checkError(err) defer rows.Close() for rows.Next() { c := make(chan bool) var http string err = rows.Scan(&http ) checkError(err) go doOne(http) <- c }}这会从一个网站检索数据。func doOne() { // some code c <- true}我的问题是“doAll”函数的迭代是否有序?
1 回答
森栏
TA贡献1810条经验 获得超5个赞
是的,迭代doAll
将是有序的,因为c
通道是无缓冲的。这意味着在您的for rows.Next()
循环中,读取c
将等待直到doOne
写入通道。
您可以通过删除通道并doOne
同步执行来简化此代码(即:只需将其作为函数调用)。以这种方式重构的代码具有完全相同的语义。
- 1 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消