go - 不能在 websocket.Message.Send 的参数中使用 ccc(int 类型)作为 *websocket.Conn 类型

标签 go websocket

我正在尝试使用 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!!!")
}

在这里阅读更多:https://golang.org/ref/spec#For_range

关于go - 不能在 websocket.Message.Send 的参数中使用 ccc(int 类型)作为 *websocket.Conn 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45891799/

相关文章:

Javascript - requestAnimationFrame with WebSockets - 性能问题

go - 由于验证错误,无法安装替换的 go 包

go - golang 中是否存在可见性问题?

java - 使用来自 GAE API 的 endpointscfg 生成 Java 客户端库时出现 HTTP 500 错误

javascript - 通过服务器将视频从一个客户端流式传输到另一个客户端

javascript - 如何通过WebSocket发送base64编码的图像? (接近事件1006)

javascript - WS ://over https://- mixed content

go - 终端命令中的以下参数是什么意思 : ./

performance - 戈朗 : right way to store map structure in lru cache

java - 在 Nashorn 中使用 WebSocket