Как читать с канала во время работы подпрограмм go - PullRequest
0 голосов
/ 11 февраля 2020

Я ищу, чтобы запустить неизвестное количество горутин. В этом примере добавление к каналу number. Затем читайте сообщения с канала messages по мере их поступления.

Почему я вижу только одно сообщение, когда ожидаю увидеть все 100 сообщений в этом коде? Как просмотреть сообщения для всех добавленных номеров?

Go Детская площадка

package main

import (
    "fmt"
)

func Run(numbers chan int, messages chan string) {
    stuff := <-numbers
    messages <- fmt.Sprintf("Ran %d", stuff)
}

func main() {
    var numbers = make(chan int)
    var messages = make(chan string)

    go Run(numbers, messages)

    for i := 0; i < 100; i++ {
        go func(i int) { numbers <-i }(i) 
    }

    msg := <-messages
    fmt.Println(msg)
}

1 Ответ

3 голосов
/ 11 февраля 2020

Поскольку Run читает одно сообщение из numbers, записывает одно сообщение в messages и завершается. Попробуйте вместо этого:


func Run(numbers chan int, messages chan string) {
    for stuff := range numbers {
       messages <- fmt.Sprintf("Ran %d", stuff)
    }
}

Это будет работать до тех пор, пока numbers не будет закрыто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...