donglu5041 2013-07-30 15:33
浏览 171
已采纳

有什么方法可以检查Go chan中是否缓冲了值?

How can I do something like the following?:

func foo(input <-chan char, output chan<- string) {
    var c char
    var ok bool
    for {
        if ThereAreValuesBufferedIn(input) {
            c, ok = <-input
        } else {
            output <- "update message"
            c, ok = <-input
        }
        DoSomethingWith(c, ok) 
    }
}

Basically, I want to check if there are buffered values in the chan so that if there aren't, I could send an update message before the thread is blocked.

  • 写回答

3条回答 默认 最新

  • dongzhidian3538 2013-07-30 15:40
    关注
    package main
    
    func foo(input <-chan char, output chan<- string) {
            for {
                    select {
                    case c, ok := <-input:
                            if ok { // ThereAreValuesBufferedIn(input)
                                    ... process c
                            } else { // input is closed
                                    ... handle closed input
                            }
                    default:
                            output <- "update message"
                            c, ok := <-input // will block
                            DoSomethingWith(c, ok)
                    }
    
            }
    }
    

    EDIT: Fixed scoping bug.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集