我正在尝试使用 websockets 向客户端发送广播消息。如何修复此代码以正确地向所有客户端发送消息并且没有该错误?
package main
import (
"fmt"
"golang.org/x/net/websocket"
"net/http"
)
var connections []websocket.Conn
func main() {
fmt.Println("vim-go")
http.Handle("/", websocket.Handler(Server))
err := http.ListenAndServe(":8888", nil)
if err != nil {
panic("ListenAndServe: " + err.Error())
}
}
func Server(ws *websocket.Conn) {
lll := append(connections, *ws)
var message string
websocket.Message.Receive(ws, &message)
fmt.Println(message)
for ccc := range connections {
websocket.Message.Send(ccc, "Another connection!!!")
}
}
最佳答案
不确定你想用 lll
做什么,但如果不使用它,你的代码应该不会编译。
当 range
在 :=
左侧使用单个迭代变量遍历 slice/数组时,它将被分配迭代。所以在你的情况下 ccc
是索引。
您可以做的一件事是:
for ccc := range connections {
websocket.Message.Send(connections[ccc], "Another connection!!!")
}
但您可能真正想要的是,删除索引并立即获取元素,如果您不打算使用,您可以使用两个迭代变量将 _
作为第一个索引。
for _, ccc := range connections {
websocket.Message.Send(ccc, "Another connection!!!")
}
关于go - 不能在 websocket.Message.Send 的参数中使用 ccc(int 类型)作为 *websocket.Conn 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45891799/