我想创建一个等待服务器运行的websocket客户端。如果服务器关闭连接,则应重新连接。
我尝试的操作不起作用,我的代码退出并出现运行时错误:
panic: runtime error: invalid memory address or nil pointer dereference
func run() {
origin := "http://localhost:8080/"
url := "ws://localhost:8080/ws"
ws, err := websocket.Dial(url, "", origin)
if err != nil {
fmt.Println("Connection fails, is being re-connection")
main()
}
if _, err := ws.Write([]byte("something")); err != nil {
log.Fatal(err)
}
}
答案 0 :(得分:8)
您的示例看起来像一个代码段。很难说为什么你在没有看到所有代码的情况下得到错误。正如您在帖子的评论中指出的那样,您不能再从您的代码中调用main(),并且包括恐慌报告中的行号也会有所帮助。
通常将程序最小化到最小的情况,任何人都可以运行并重现错误是获得帮助的最快方法。我以这种方式为你重建了你的。希望您可以使用它来修复自己的代码。
package main
import (
"websocket"
"fmt"
"log"
"time"
)
func main() {
origin := "http://localhost:8080/"
url := "ws://localhost:8080/ws"
var err error
var ws *websocket.Conn
for {
ws, err = websocket.Dial(url, "", origin)
if err != nil {
fmt.Println("Connection fails, is being re-connection")
time.Sleep(1*time.Second)
continue
}
break
}
if _, err := ws.Write([]byte("something")); err != nil {
log.Fatal(err)
}
}
要运行此功能,只需将其复制到系统上名为main.go的文件中,然后运行:
go run main.go