登录
首页 >  Golang >  Go问答

为什么这两种实现方式不同?

来源:stackoverflow

时间:2024-04-09 20:36:29 313浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《为什么这两种实现方式不同?》,涉及到,有需要的可以收藏一下

问题内容

我是 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 范围内出现错误“cannot range over addagg(type func())”

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

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


解决方案


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

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

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>