猿问

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

我是一个 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)

      }   

    }   

  }

循环构造是永远循环还是幕后有事件系统绑定?


达令说
浏览 146回答 2
2回答

GCT1015

Go 编程语言规范对于报表“for”语句指定块的重复执行。迭代由条件、“for”子句或“range”子句控制。ForStmt&nbsp;=&nbsp;"for"&nbsp;[&nbsp;Condition&nbsp;|&nbsp;ForClause&nbsp;|&nbsp;RangeClause&nbsp;]&nbsp;Block&nbsp;. Condition&nbsp;=&nbsp;Expression&nbsp;.以最简单的形式,“for”语句指定只要布尔条件评估为真就重复执行块。在每次迭代之前评估条件。如果条件不存在,则相当于布尔值 true。如果条件不存在,例如 ,for { ... }则等效于布尔值true,例如for true { ... }。它有时被称为无限循环。因此,您将需要另一种机制(例如break或return)来终止循环。该for语句的文档是Go 编程语言规范。

潇潇雨雨

for不加任何额外的语句基本上和while (true)其他语言一样,死循环。
随时随地看视频慕课网APP

相关分类

Go
我要回答