【问题标题】:Why are these two implementations different?为什么这两种实现不同?
【发布时间】:2018-11-02 06:19:33
【问题描述】:

我是 Golang 的新手 - 在尝试将以下内容重写为单线程实现时。

.....
run := func(handler func(chan<- modify), threads int) <-chan modify {
    result := make(chan modify)
    go func() {
        var wg sync.WaitGroup
        for i := 0; i < threads; i++ {
            wg.Add(1)
            go func() {
                defer wg.Done()
                handler(result)
            }()
        }
        wg.Wait()
        close(result)
    }()
    return result
}


modifyAgg := run(func(result chan<- modify) {
aggre := run(func(result chan<- modify) {
    u.addAgg(slices, result)  // returns result channel
}, u.threads.GrpTxns)

.... 

在上面的代码中,变量 addAgg 的类型是 chan

aggre := func() {
    result:= make(chan modify)
    defer close(result)
    u.addAgg(slices, result) // returns result channel
}

如何更改第二个实现以模仿第一个?谢谢!

【问题讨论】:

    标签: go higher-order-functions


    【解决方案1】:

    我能够在单线程中实现这个...

    aggre := func() <-chan modify{
            result:= make(chan modify, 50) // make it non blocking
            u.addAgg(slices, result)
            defer close(result)
            return result
        }()
    

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2020-05-11
      • 2018-02-11
      相关资源
      最近更新 更多