带有多余通道的大猩猩 websocket 示例?

gorilla websocket example with a superfluous channel?

在这个简单的例子中,我不明白频道“完成”的原因

https://github.com/gorilla/websocket/blob/master/examples/echo/client.go

通道是结构类型,使用了三次

  1. Z41 延迟关闭(完成)
  2. Z57 案例<-完成:
  3. Z77 案例<-完成:

没有人写信到频道。所以 2. 和 3. 会阻塞, 据我所知。我将不胜感激任何解释 这是如何工作的。

specification says:

After calling close, and after any previously sent values have been received, receive operations will return the zero value for the channel's type without blocking.

调用 close(done)case <-done: 分支不会阻塞。

通常使用接近信号完成的通道,因为发出完成信号的 goroutine 不需要知道等待完成的 goroutine 的数量。此外,通道关闭永远不会阻塞等待接收者。