为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这两个实现不同?

为什么这两个实现不同?

Go
开心每一天1111 2023-05-04 17:45:20
我是 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}如何更改第二个实现以模仿第一个?谢谢 !
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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


aggre := func() <-chan modify{

        result:= make(chan modify, 50) // make it non blocking

        u.addAgg(slices, result)

        defer close(result)

        return result

    }()


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信