我是一个 golang 新手,我遇到了一个相当有趣的控制结构,它不遵循经典的命令式 for 循环结构。我也无法找到有关该结构的文档。以下是有问题的代码: for { // read each incoming message m, err := getMessage(ws) if err != nil { log.Fatal(err) } // see if we're mentioned if m.Type == "message" && strings.HasPrefix(m.Text, "<@"+id+">") { // if so try to parse if ans := lookup(session, m.Text) if len(ans)>0 { // looks good, get the quote and reply with the result go func(m Message) { for _, def := range ans { if len(def[1]) > 0 { m.Text = "*" + def[0] + " " + def[1] + "*: " + def[2] } else { m.Text = "*" + def[0] + "*: " + def[2] } postMessage(ws, m) } }(m) // NOTE: the Message object is copied, this is intentional } else { // huh? m.Text = fmt.Sprintf("sorry, that does not compute\n") postMessage(ws, m) } } }循环构造是永远循环还是幕后有事件系统绑定?
2 回答
GCT1015
TA贡献1827条经验 获得超4个赞
“for”语句指定块的重复执行。迭代由条件、“for”子句或“range”子句控制。
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block . Condition = Expression .以最简单的形式,“for”语句指定只要布尔条件评估为真就重复执行块。在每次迭代之前评估条件。如果条件不存在,则相当于布尔值 true。
如果条件不存在,例如 ,for { ... }
则等效于布尔值true
,例如for true { ... }
。它有时被称为无限循环。因此,您将需要另一种机制(例如break
或return
)来终止循环。
该for
语句的文档是Go 编程语言规范。
- 2 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消