The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
mokeychan

请教一个 Go 的问题 如何确保缓冲 channel 关闭之后数据被全部读完呢?

  •  
  •   mokeychan · May 10, 2019 · 3067 views
    This topic created in 2580 days ago, the information mentioned may be changed or developed.

    如果不能确保的话,那么主线程会提前退出,部分数据就会被抛弃了?

    6 replies    2019-05-11 18:20:48 +08:00
    SimonDing
        1
    SimonDing  
       May 10, 2019 via Android
    range 来耗尽 channel?
    a719114136
        2
    a719114136  
       May 10, 2019 via Android
    处理 channel 之前用 waitGroup 记一下,退出时等待 waitgroup 变为 0
    dreampuf
        3
    dreampuf  
       May 10, 2019
    由 producer 关闭
    liulaomo
        4
    liulaomo  
       May 10, 2019
    @SimonDing 说的对。

    或者如下手动,其实和 for v := range c { use(v) } 是等价的。
    for {
    v, closed := <-c;
    if closed (
    break
    }
    // use v ...
    }
    cabing
        5
    cabing  
       May 10, 2019
    这个加个方法 waitGroup 监听下吧。

    在主线程上加个 w.Add(1)

    在这里可以手动关闭吧。 close(xxx)

    wg.wait();

    做一个开关 chan
    go func(chan a interface{}){

    for xxxx{
    do something...
    }
    wg.done();

    }
    janxin
        6
    janxin  
       May 11, 2019
    代码组织设计时考虑,由生产者关闭
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3365 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 11:31 · PVG 19:31 · LAX 04:31 · JFK 07:31
    ♥ Do have faith in what you're doing.