I've started playing with golang after reading the GOLANG-BOOK. and I'm trying to build a simple TCP chat. I've created a user struct, and I want to listen to every user.inbound channel from the users array.
I know my problem here is with the function writeUser() since its waiting for user.inbound. im not sure how to properly make this kind channeling with array of users.
this is the errors I recieve from the compiler:
./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 }
And this is my Code:
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;
}
}
You've tried to navigate to the inbound
channel on the user in your function signature:
func recieve (user.inbound chan string) {
// ^^^^^ - that part is wrong
You can't navigate to an objects property like that in a function argument - it doesn't really make sense. What you want in this context, is any channel of strings:
func recieve (inbound chan string) {
Exactly what you'll do with that channel I will leave to you (you don't seem to do anything with it in the function anyway).
The other errors are no doubt stacked from the first one - given that such an error can throw the parser out of whack.
Also, you have a few random dangling semicolons down the bottom in your broadcast
method.