Передача информации из канала в канал при изменении ее в процессе - PullRequest
1 голос
/ 27 марта 2019

Я новичок в языке программирования 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)
    }

}

1 Ответ

1 голос
/ 27 марта 2019

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

...