2014-11-04 162 views
0

我在阅读GOLANG-BOOK后开始玩golang。 我试图建立一个简单的TCP聊天。 我创建了一个用户结构,并且我想要听用户数组中的每个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的FUNC 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; 
    } 
} 
+1

我编辑了你的问题标题 - 考虑到这里没有问题的频道数组。 – 2014-11-04 21:32:44

回答

2

您尝试在功能签名中导航到用户的inbound频道:

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

您不能在函数参数中导航到像这样的对象属性 - 它没有任何意义。你想在这种情况下,什么是任何通道:

func recieve (inbound chan string) { 

究竟是什么,你会与该通道做我会离开你(你似乎没有在函数用它做任何事无论如何)。

其他错误无疑是从第一个错误堆叠 - 考虑到这样的错误可能会导致解析器出现问题。

此外,您的broadcast方法中底部有几个随机摇晃分号。

+0

但是我怎样才能让用户在接收功能? 我想收到用户和入站消息。所以我可以在user.conn – DanR 2014-11-04 21:39:46

+0

上使用user.inbound消息,我也编辑了这个问题,并将接收函数改为writeUser,这样你就可以理解我要做的事情。 我需要获取入站消息并使用来自用户的conn将其写回给用户struct – DanR 2014-11-04 21:44:48

+1

您需要传递给用户。没有办法从“入站”通道向后导航到“用户”。沿通道传递'User'对象,并将_down_导航到其“入站”通道。 – 2014-11-04 21:45:57