golang websocket.WriteMessage()忽略panic继续运行。
时间: 2024-02-19 17:58:33 浏览: 129
golang websocket
在 Go 语言中,可以使用 `defer` 和 `recover()` 两个语句结合起来,实现忽略 `websocket.WriteMessage()` 函数的 `panic`,并继续运行。具体做法是,在写消息的代码块中使用 `defer` 和 `recover()` 语句,将 `panic` 转换成普通的错误信息,并继续执行程序。
以下是一个示例程序,演示如何忽略 `websocket.WriteMessage()` 函数的 `panic`,并继续运行:
```go
package main
import (
"fmt"
"net/http"
"time"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func main() {
http.HandleFunc("/ws", wsHandler)
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println(err)
}
}
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println(err)
return
}
defer conn.Close()
for {
err := conn.WriteMessage(websocket.TextMessage, []byte("Hello, World!"))
if err != nil {
fmt.Println(err)
err = recover().(error)
fmt.Println("Recovered:", err)
}
time.Sleep(time.Second)
}
}
```
在上面的示例程序中,我们在写消息的代码块中使用 `defer` 和 `recover()` 语句,将 `panic` 转换成普通的错误信息,并输出 `Recovered:` 和错误信息。程序会继续执行 `time.Sleep(time.Second)` 语句,等待一秒钟后再次尝试写入消息。
需要注意的是,`recover()` 函数只能在 `defer` 语句中使用,且只有在发生 `panic` 时才会返回非 `nil` 的值,否则会返回 `nil`。在使用 `recover()` 函数时,需要将返回值转换成对应的类型,例如在上面的示例程序中,我们将返回值转换成 `error` 类型。
阅读全文