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 に答える