1

Go では、チャネルから受信しようとすると、チャネルに何らかの値が入るまでプログラムの実行が停止します。ただし、私がやりたいことは、プログラムの実行を継続させ、チャネルに値がある場合はそれに基づいて行動することです。

私が考えている疑似コードは次のようなものです。

mychan := make(chan int, 1)

go someGoRoutine(mychan) // This might put some value in mychan at some point

for {
    if something in "mychan" {
        // Remove the element from "mychan" and process it
    } else {
        // Other code
    }
}

私が理解しているようにv <- mychan、値が利用可能になるまでプログラムの実行がブロックされるため、単純に使用することはできません。Goでこれを行う方法は何でしょうか?

4

1 に答える 1

8

それがselectの目的です。例えば:

for {
        select {
        case v := <-c1:
                // process v
        case v, ok := <-c2:
                // Second form, '!ok' -> c2 was closed
        default:
                // receiving was not done
        }
}
于 2013-07-16T07:49:51.917 に答える