3

我想创建一个等待服务器运行的 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)
  }
}
4

1 回答 1

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
于 2012-11-25T16:56:29.297 回答