亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go-處理程序中的無限循環

Go-處理程序中的無限循環

Go
哆啦的時光機 2022-11-28 17:05:34
我很難理解我使用博客所做的事情的實現我正在創建一個新的 websocket 連接,其中我正在運行一個無限循環據我了解無論 websocket 收到什么消息,無限循環都應該無限期地運行但事實并非如此,它內部的邏輯只有在從前端 ws 連接發送“新的有效負載/消息”時才會觸發:func (s *SocketHandlers) NewConnectionHandler(w http.ResponseWriter, r *http.Request) {    // upgrade the http request to a ws request    ws, err := upgrader.Upgrade(w, r, nil)    if err != nil {        log.Fatal(err)    }    defer ws.Close()    for { // infinite loop        log.Println("Checking to see if this repeats") // <=== PRINTS ONLY ONCE!        var payload core.NewSessionPayload        if err := ws.ReadJSON(&payload); err != nil {            log.Println("Cannot read socket conection payload")            log.Fatal(err)        }        s.clientsMap[ws] = core.ClientNode{            Active:   true,            Username: payload.Username,        }        // broadcast the latest users list to all the users        s.broadcaster <- payload.Username    }}
查看完整描述

1 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

關鍵在于s.broadcaster <- payload.Username 它試圖從渠道獲取價值。

您可以在此處閱讀有關頻道的更多信息https://gobyexample.com/channels。

通道操作(即寫入或讀?。┍举|上是阻塞的。

這表示:

  • 當我們使用 GoRoutine 將數據發送到通道時,它將被阻塞,直到數據被另一個 GoRoutine 消費。

  • 當我們使用 GoRoutine 從通道接收數據時,它將被阻塞,直到數據在通道中可用。


查看完整回答
反對 回復 2022-11-28
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號