【发布时间】:2017-06-04 17:36:22
【问题描述】:
我正在尝试等待一个特定的条件,我想知道如何最好地做到这一点。我有一个看起来像这样的结构(简化):
type view struct {
timeFrameReached bool
Rows []*sitRow
}
在 goroutine 中,我正在更新一个文件,该文件被读入 view 变量。行数增加,timeFrameReached 最终将是true。
在其他地方,我想等待以下条件成立:
view.timeFrameReached == true || len(view.Rows) >= numRows
我正在尝试学习通道以及 Go 的条件变量如何工作,我想知道这里最好的解决方案是什么。理论上,我可以做一些像这样微不足道的事情:
for {
view = getView()
if view.timeFrameReached == true || len(view.Rows) >= numRows {
break
}
}
但这显然是一个幼稚的解决方案。 numRows 的值来自 HTTP 请求,因此条件方法似乎具有挑战性。 goroutine 不知道何时广播条件,因为它不知道它正在寻找的行数。
【问题讨论】:
标签: go channel condition-variable