Почему эти две реализации отличаются? - PullRequest
0 голосов
/ 02 ноября 2018

Я новичок в Голанге - при попытке переписать следующее в однопоточную реализацию.

.....
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 ())" </p>

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

Как изменить вторую реализацию так, чтобы она имитировала первую? Спасибо!

1 Ответ

0 голосов
/ 03 ноября 2018

Мне удалось реализовать это в одном потоке ...

aggre := func() <-chan modify{
        result:= make(chan modify, 50) // make it non blocking
        u.addAgg(slices, result)
        defer close(result)
        return result
    }()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...