【问题标题】:Passing info from channel to channel while altering it in go将信息从一个通道传递到另一个通道,同时在 go 中改变它
【发布时间】:2019-03-27 12:29:42
【问题描述】:

我是 Go 编程语言的新手。 我刚刚从他们的网站上了解了频道,并尝试创建 以下程序: 1) 我想创建 100,000 个频道。 2)当第一个通道接收到一个消息(值)时,他将其加 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】:

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)
}

【讨论】:

  • 添加说明这些解决方案为何起作用:它们创建一个接收值、递增值并将其发送到下一个通道的 goroutine。
猜你喜欢
  • 2020-05-03
  • 2016-06-28
  • 2018-12-25
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2016-10-22
相关资源
最近更新 更多