2014-11-04 4 views
0

Я начал играть с golang после прочтения GOLANG-BOOK. и я пытаюсь создать простой TCP-чат. Я создал пользовательскую структуру, и я хочу слушать каждый user.inbound канал из массива users.Ошибки компилятора

Я знаю, что моя проблема здесь связана с функцией writeUser(), так как она ждет пользователя. im не уверен, как правильно сделать такой канал с массивом пользователей.

это ошибки я получаю от компилятора:

./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; 
    } 
} 
+1

Я отредактировал название вопроса - учитывая, что здесь нет проблем с массивами каналов. –

ответ

2

Вы пытались перейти к каналу inbound пользователя в своей сигнатуре функции:

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

Вы не можете перейти к объекту, как в аргументе функции, - это на самом деле не имеет смысла. Что вы хотите в этом контексте является любого канала строк:

func recieve (inbound chan string) { 

Именно то, что вы будете делать с этим каналом я оставляю вам (вы, кажется, не делать ничего с ним в функции так или иначе).

Другие ошибки, без сомнения, сложены из первого - при условии, что такая ошибка может вывести анализатор из строя.

Кроме того, у вас есть несколько случайных свисающих точек с запятой вниз по вашему методу broadcast.

+0

Но как я могу получить пользователя внутри функции получения? Я хочу получить пользователя и входящее сообщение. поэтому я мог использовать сообщение user.inbound с user.conn – DanR

+0

, также я отредактировал вопрос и изменил функцию получения на writeUser, чтобы вы могли понять, что я должен делать. Я получаю входящее сообщение и записываю его обратно пользователю, используя conn от пользователя struct – DanR

+1

Вам нужно передать пользователя. Невозможно перейти назад от «входящего» канала к «User». Передайте объект 'User' по каналу и переместите _down_ на его' входящий 'канал. –

Смежные вопросы