无限循环 - 迭代,函数返回true

时间:2014-10-13 06:54:51

标签: loops go infinite

我有疑问。我需要在后台运行一个程序。该程序是在我的数据库中收集和保存数据。

我开始这样做了:

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;功能会按顺序吗?

1 个答案:

答案 0 :(得分:0)

是的,doAll的迭代将按顺序进行,因为c频道是无缓冲的。这意味着在for rows.Next()循环中,c的读取将等到doOne写入频道。

通过删除通道并同步执行doOne(即:将其称为函数),可以使此代码更简单。以这种方式重构的代码具有完全相同的语义。