gpt4 book ai didi

go - 为什么这两个实现不同?

转载 作者:IT王子 更新时间:2023-10-29 02:08:29 26 4
gpt4 key购买 nike

我是 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
}

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

最佳答案

我能够在单线程中实现它...

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

关于go - 为什么这两个实现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53113544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com