为了账号安全,请及时绑定邮箱和手机立即绑定

无条件的 { ..block.. } 的 golang 有什么作用?

无条件的 { ..block.. } 的 golang 有什么作用?

Go
达令说 2021-12-07 14:56:56
我是一个 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个赞

Go 编程语言规范

对于报表

“for”语句指定块的重复执行。迭代由条件、“for”子句或“range”子句控制。

ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .
Condition = Expression .

以最简单的形式,“for”语句指定只要布尔条件评估为真就重复执行块。在每次迭代之前评估条件。如果条件不存在,则相当于布尔值 true。

如果条件不存在,例如 ,for { ... }则等效于布尔值true,例如for true { ... }。它有时被称为无限循环。因此,您将需要另一种机制(例如breakreturn)来终止循环。

for语句的文档是Go 编程语言规范


查看完整回答
反对 回复 2021-12-07
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

for不加任何额外的语句基本上和while (true)其他语言一样,死循环。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信