还未发布过话题
  • 👍 👍 👍 冲这个标题都应该点个赞

  • golang 怎么并发 at 2019年01月03日

    根据 heramerom 的基础上小小修改了下,控制 TodoWork 函数的正常退出

    func TodoWork(allMap map[string][]interface{}) {
        ch := make(chan interface{}, 1024)
        wg := sync.WaitGroup{}
        wg.Add(len(allMap))
    
        go func() {
            defer close(ch)
            wg.Wait()
        }()
        for key, value := range allMap {
            go func() {
                defer wg.Done()
                processOneByOne(key, value, ch)
            }()
        }
    
        for {
            value, ok := <-ch
            if !ok {
                panic ()
            }
            println(value)
        }
    }
    
    func processOneByOne(key string, value []interface{}, ch chan interface{}) {
        // do something
        ch <- result 
    }