我有疑问。我需要在后台运行一个程序。该程序是在我的数据库中收集和保存数据。
我开始这样做了:
func main() {
for {
doAll()
}
}
并且一次从所有地址检索数据("去"功能):
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
}
我的问题是&#34; doAll&#34;功能会按顺序吗?
答案 0 :(得分:0)
是的,doAll
的迭代将按顺序进行,因为c
频道是无缓冲的。这意味着在for rows.Next()
循环中,c
的读取将等到doOne
写入频道。
通过删除通道并同步执行doOne
(即:将其称为函数),可以使此代码更简单。以这种方式重构的代码具有完全相同的语义。