我是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(type func())范围内”
aggre := func() {
result:= make(chan modify)
defer close(result)
u.addAgg(slices, result) // returns result channel
}
如何更改第二个实现以模仿第一个?谢谢!
答案 0 :(得分:1)
我能够在单线程中实现此目标...
aggre := func() <-chan modify{
result:= make(chan modify, 50) // make it non blocking
u.addAgg(slices, result)
defer close(result)
return result
}()