Golangで書かれたWebsocketサーバーで、非同期でReceive, Sendをできるようにしたいと思っています。
下のようにchat_receiver, chat_sender関数内でfor をつかってループさせ、それをgoroutineを使って並列実行させようと考えています。
しかし、このコードを実行しwebsocket clientでアクセスすると、use of closed network connectionと表示されます。
この問題を解決するにはどうすればいいのでしょうか?

chat_senderはStdinから読み込まれた文字列を相手に送り、
chat_receiverは相手から送られた文字列をStdoutに表示しようとしています。


package main

import (
    "bufio"
    "fmt"
    "golang.org/x/net/websocket"
    "net/http"
    "os"
)

func chat_sender(ws *websocket.Conn) {
    for {
        bio := bufio.NewReader(os.Stdin)
        line, _, err := bio.ReadLine()
        if err != nil {
            fmt.Println(err)
            fmt.Println("returned")
            return
        }
        websocket.Message.Send(ws, line)

    }
}

func chat_receiver(ws *websocket.Conn) {
    for {
        var st string
        if err := websocket.Message.Receive(ws, &st); err != nil {
            fmt.Println("err: ", err)
            return
        }
        fmt.Println("chat receive:", st)
        fmt.Println("returned")
    }
}

func chatHandler(ws *websocket.Conn) {
    go chat_sender(ws)
    go chat_receiver(ws)
}

func main() {
    http.HandleFunc("/chat", func(w http.ResponseWriter, req *http.Request) {
        s := websocket.Server{Handler: websocket.Handler(chatHandler)}
        s.ServeHTTP(w, req)

    })
    fmt.Println("port:", 9563)
    http.ListenAndServe(":9563", nil)
}