猿问

为什么这两个实现不同?

我是 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<- modify。以下不是 - 在遍历变量 aggre 时出现错误“无法遍及 addAgg(类型 func())”


aggre := func() {

    result:= make(chan modify)

    defer close(result)

    u.addAgg(slices, result) // returns result channel

}

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



开心每一天1111
浏览 86回答 1
1回答

斯蒂芬大帝

我能够在单线程中实现这个......aggre := func() <-chan modify{&nbsp; &nbsp; &nbsp; &nbsp; result:= make(chan modify, 50) // make it non blocking&nbsp; &nbsp; &nbsp; &nbsp; u.addAgg(slices, result)&nbsp; &nbsp; &nbsp; &nbsp; defer close(result)&nbsp; &nbsp; &nbsp; &nbsp; return result&nbsp; &nbsp; }()
随时随地看视频慕课网APP

相关分类

Go
我要回答