我是一个golang新手,我遇到了一个相当有趣的控制结构,它不遵循经典的命令式循环结构.我一直无法找到关于结构的文档.以下是有问题的代码:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
循环构造是永远循环还是在幕后有事件系统绑定?
pet*_*rSO 10
"for"语句指定重复执行块.迭代由条件,"for"子句或"range"子句控制.
Run Code Online (Sandbox Code Playgroud)ForStmt = "for" [ Condition | ForClause | RangeClause ] Block . Condition = Expression .在最简单的形式中,只要布尔条件的计算结果为true,"for"语句就会指定块的重复执行.在每次迭代之前评估条件.如果条件不存在,则它等于布尔值true.
如果条件不存在,例如,for { ... },它等同于布尔值true,例如for true { ... }.它有时被称为无限循环.因此,您将需要另一种机制,例如break或return,来终止循环.
该for语句的文档是The Go Programming Language Specification.
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |