将信息从通道传递到通道,同时在go中进行更改

问题描述 投票:1回答:1

我是go编程语言的新手。我刚从他们的网站上了解了频道,并尝试创建以下程序:1)我想创建100,000个频道。 2)当第一个通道收到一个msg(值)时,他向它添加1并将其传递给下一个通道(按顺序)。 3)当我们到达最后一个频道时,它将打印100,001。

我用循环创建了通道,但我发现很难找到如我所描述的那样以“多米诺”方式传递和改变数据。任何解决方案或参考将不胜感激。谢谢!

这是我的代码:

package main

func addOneAndPass(c1 chan int, c2 chan int)  {
    c := make(chan int)
    c <- 1
    val := <- c
}

func main() {
    const n = 100000
    var channels [n]chan int
    for i := 0; i < n; i++ {
        channels[i] = make(chan int)
    }

}
go channels
1个回答
1
投票

https://play.golang.org/p/ku-Dretm8EA

package main

import (
    "fmt"
)

func add1(in chan int) (chan int)  {
    i := <-in
    out := make(chan int, 1)
    out <- (i+1)
    return out
}

func main() {
    ch := make(chan int, 1)
    ch <- 1
    for i := 0; i < 100000; i++ {
        ch = add1(ch)
    }
    fmt.Println(<-ch)
}

另一个解决方案:https://play.golang.org/p/uWVxSG0xgqU

package main

import (
    "fmt"
)

func add1(in, out chan int)  {
    i := <-in
    out <- (i+1)
}

func main() {
    start := make(chan int)
    var in = start
    var ch chan int
    for i := 0; i < 100000; i++ {
        ch = make(chan int)
        go add1(in, ch)
        in = ch
    }
    start <- 1
    fmt.Println(<-ch)
}

© www.soinside.com 2019 - 2024. All rights reserved.