0

在阅读了 GOLANG-BOOK 之后,我开始使用 golang。我正在尝试构建一个简单的 TCP 聊天。我创建了一个用户结构,我想从 users 数组中监听每个 user.inbound 频道。

我知道我的问题在于函数 writeUser(),因为它正在等待 user.inbound。我不确定如何正确地与一系列用户进行这种通道。

这是我从编译器收到的错误:

./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 回答