V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
zhengdai1990
V2EX  ›  Go 编程语言

go 问题请教

  •  
  •   zhengdai1990 · 2020-12-15 17:09:11 +08:00 · 1402 次点击
    这是一个创建于 1437 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复
    linvon
        1
    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
        2
    zhengdai1990  
    OP
       2020-12-15 19:08:50 +08:00
    多谢大佬
    zhengdai1990
        3
    zhengdai1990  
    OP
       2020-12-15 22:48:26 +08:00
    @linvon 有个疑问,嵌套在里面的这个 select 不是谁先满足就执行谁么,会执行那个 case time.After 么
    linvon
        4
    linvon  
       2020-12-16 10:12:04 +08:00
    @zhengdai1990 #3 reply channel 如果不带缓存,那么就会阻塞的,必须接受侧已经准备好了才能发送,如果接受侧没有准备那就无法执行,这个时候就会执行 time.After
    zhengdai1990
        5
    zhengdai1990  
    OP
       2020-12-16 11:19:36 +08:00
    @linvon 好吧,明白了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:06 · PVG 04:06 · LAX 12:06 · JFK 15:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.