gpt4 book ai didi

go - 在 Go 中使用 select 发送到 channel 有什么好处?

转载 作者:IT王子 更新时间:2023-10-29 00:54:03 25 4
gpt4 key购买 nike

在 Gorilla websocket 的示例目录中有一个名为 hub.go 的文件。

https://github.com/gorilla/websocket/blob/master/examples/chat/hub.go

在这里,您可以在类型集线器上找到执行此操作的方法。

func (h *hub) run() {
for {
select {
case c := <-h.register:
h.connections[c] = true
case c := <-h.unregister:
if _, ok := h.connections[c]; ok {
delete(h.connections, c)
close(c.send)
}
case m := <-h.broadcast:
for c := range h.connections {
select {
case c.send <- m:
default:
close(c.send)
delete(h.connections, c)
}
}
}
}
}

为什么在最后一种情况下它不直接发送到 c.send channel ?

case m := <-h.broadcast:
for c := range h.connections {
c.send <- m
}

最佳答案

这是保证非阻塞发送到 channel 的方法。如果 c.send chan 现在不能接受新消息,将执行默认分支。如果没有 select{} block ,则可以阻止发送到无缓冲或完全填充的缓冲 channel 。

关于go - 在 Go 中使用 select 发送到 channel 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com