我是一個 golang 新手,我遇到了一個相當有趣的控制結構,它不遵循經(jīng)典的命令式 for 循環(huán)結構。我也無法找到有關該結構的文檔。以下是有問題的代碼: 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) } } }循環(huán)構造是永遠循環(huán)還是幕后有事件系統(tǒng)綁定?
2 回答

GCT1015
TA貢獻1827條經(jīng)驗 獲得超4個贊
“for”語句指定塊的重復執(zhí)行。迭代由條件、“for”子句或“range”子句控制。
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block . Condition = Expression .以最簡單的形式,“for”語句指定只要布爾條件評估為真就重復執(zhí)行塊。在每次迭代之前評估條件。如果條件不存在,則相當于布爾值 true。
如果條件不存在,例如 ,for { ... }
則等效于布爾值true
,例如for true { ... }
。它有時被稱為無限循環(huán)。因此,您將需要另一種機制(例如break
或return
)來終止循環(huán)。
該for
語句的文檔是Go 編程語言規(guī)范。
- 2 回答
- 0 關注
- 198 瀏覽
添加回答
舉報
0/150
提交
取消