【发布时间】:2020-04-08 19:09:09
【问题描述】:
我已经编写了 2 个用于 Web 套接字读取和写入消息的 goroutine。例如,
ch := make(chan bool)
folderName := make(chan string)
go func(co *websocket.Conn) {
m, d, err := co.ReadMessage()
fmt.Println(m, string(d), err)
folderName <- string(d)
ch <- true
if string(d) == "closed" {
ch <- true
co.Close()
}
}(conn)
这个 goroutine 用于从套接字读取消息并更新通道。
go func(co *websocket.Conn) {
value := <-ch
fldr := <-folderName
fmt.Println(fldr, value)
}(conn)
这个 goroutine 是用来写消息的。但我无法获得 folderName 和 ch 频道值。我不知道如何找到问题。
如果我通过单通道,我可以从通道中获取消息。但我需要在那个 goroutine 中获得 2 个值。
任何人都可以帮助解决这些问题吗?提前致谢。
【问题讨论】:
-
1.您不能通过
ch(即chan string)发送true。请编辑代码。 2.订单事项。您尝试接收的代码必须先接收folderName,因为您首先通过folderName发送,否则两个gorotine 都会阻塞。 3. 不用多通道,你可以把数据打包成一个结构体,只有一个通道,这样通常可以减少混乱。 -
如果你能接受这个答案,如果它达到了目的,我也将不胜感激:)