猿问

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

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


我开始这样做:


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”函数的迭代是否有序?


炎炎设计
浏览 206回答 1
1回答

森栏

是的,迭代doAll将是有序的,因为c通道是无缓冲的。这意味着在您的for rows.Next()循环中,读取c将等待直到doOne写入通道。您可以通过删除通道并doOne同步执行来简化此代码(即:只需将其作为函数调用)。以这种方式重构的代码具有完全相同的语义。
随时随地看视频慕课网APP

相关分类

Go
我要回答