【问题标题】:Compiler errors编译器错误
【发布时间】:2014-11-04 21:23:40
【问题描述】:

在阅读了 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;
    }
}

【问题讨论】:

  • 我编辑了您的问题标题 - 考虑到这里的频道数组没有问题。

标签: arrays go goroutine channels


【解决方案1】:

您已尝试导航到函数签名中用户的inbound 频道:

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

您不能像在函数参数中那样导航到对象属性 - 这真的没有意义。在这种情况下,您想要的是 任何字符串通道

func recieve (inbound chan string) {

我将留给你的那个频道你会做什么(无论如何你似乎没有在函数中对它做任何事情)。

其他错误无疑是从第一个错误叠加而来的——因为这样的错误可能会使解析器失控。

另外,在 broadcast 方法的底部有几个随机悬空的分号。

【讨论】:

  • 但是我怎样才能让用户进入接收函数呢?我想接收用户和入站消息。所以我可以将 user.inbound 消息与 user.conn 一起使用
  • 我还编辑了问题并将接收功能更改为 writeUser,因此您可以理解我要做的事情。我要获取入站消息并使用来自用户结构的 conn 将其写回用户
  • 你需要传递用户。无法从inbound 频道向后导航到User。沿通道传递User 对象并向下 导航到其inbound 通道。
  • 不是这样 - 但你可以将它包装在另一个对象中并传递它。例如:user.inbound &lt;- Wrapper{msg: outboundMessage, u: userInstance,}
  • 您的问题现在已经改变,因此我们不应该在 cmets 中继续这样做。根据您刚刚放在这里的代码,我建议您再次查看您的 Go 书籍并继续学习该语言,然后再尝试变得更复杂。您正在使用一个空的 struct{} 频道,并希望它是 User 类型 - 情况并非如此。您可以使用interfacetype assertion .. 但这样做也没有任何意义——正如我在之前的评论中所说,您需要一个具体的包装对象。
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 2011-01-02
  • 2011-12-22
  • 2011-08-10
  • 2013-07-09
  • 2015-08-04
  • 2016-01-31
  • 1970-01-01
相关资源
最近更新 更多