0

GOLANG-BOOKを読んでからgolangをいじり始めました。単純な TCP チャットを構築しようとしています。ユーザー構造体を作成しました。ユーザー配列からすべての user.inbound チャネルをリッスンしたいと思います。

ここでの問題は、user.inbound を待っているため、関数 writeUser() にあることを知っています。ユーザーの配列でこの種のチャネリングを適切に行う方法がわかりません。

これは、コンパイラから受け取ったエラーです。

./chatserver.go:22: syntax error: unexpected LCHAN, expecting )
./chatserver.go:25: non-declaration statement outside function body
./chatserver.go:31: non-declaration statement outside function body
./chatserver.go:32: syntax error: unexpected }
  • 22行目は関数 writeUser() です

そして、これは私のコードです:

type User struct {
    name string
    inbound chan string
    outbound chan string
    conn net.Conn
}

func writeUser(user.inbound chan string) {
// how can I get the user connection?
    err := gob.NewDecoder(user.conn).Encode(inbound)

    if err != nil {
        fmt.Println("Error: ", err)
    }
}


func (chat *Chat) broadcast(username string, message string) {
    outboundMessage := username + ": " + message;

    for _, user := range chat.users {
        user.inbound <- outboundMessage;
    }
}
4

1 に答える 1

2

inbound関数シグネチャでユーザーのチャネルに移動しようとしました:

func recieve (user.inbound chan string) {
//            ^^^^^  - that part is wrong

関数の引数でそのようなオブジェクト プロパティに移動することはできません。意味がありません。このコンテキストで必要なのは、文字列の任意のチャネルです:

func recieve (inbound chan string) {

そのチャネルで正確に何をするかは、あなたに任せます(とにかく、関数では何もしていないようです)。

他のエラーは間違いなく最初のものから積み重ねられています - そのようなエラーがパーサーを混乱させる可能性があることを考えると。

また、broadcastメソッドの下部にいくつかのランダムなぶら下がっているセミコロンがあります。

于 2014-11-04T21:29:52.673 に答える