2014-11-04 161 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