go 问题请教

2020-12-15 17:09:11 +08:00
 zhengdai1990

https://play.golang.org/p/y_9-OQPwfsf 大佬们看这个,看下这个代码怎么改成 reply 通道内数据多久内未 receive 就触发超时,db 这个 goroutine 继续处理,而不是报错

1240 次点击
所在节点    Go 编程语言
5 条回复
linvon
2020-12-15 17:37:40 +08:00
case reply := <-reads:
select {
case reply <- state:
case <-time.After(time.Millisecond):
}

或者
reply := make(chan int, 1) 使用带缓存 channel
zhengdai1990
2020-12-15 19:08:50 +08:00
多谢大佬
zhengdai1990
2020-12-15 22:48:26 +08:00
@linvon 有个疑问,嵌套在里面的这个 select 不是谁先满足就执行谁么,会执行那个 case time.After 么
linvon
2020-12-16 10:12:04 +08:00
@zhengdai1990 #3 reply channel 如果不带缓存,那么就会阻塞的,必须接受侧已经准备好了才能发送,如果接受侧没有准备那就无法执行,这个时候就会执行 time.After
zhengdai1990
2020-12-16 11:19:36 +08:00
@linvon 好吧,明白了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/735729

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX