0

次のコード スニペットがあります。特定のディレクトリから最大 15 個のファイル名を取得するチャネルを作成します。あるチャネルでエントリを生成し、別のエントリがそれらを消費するゴルーチンを作成できると考えました。消費者は、チャネルから取得したものを印刷する必要があります。

私のプログラムは印刷せずに実行されますが、これはコンシューマ ルーチンがスリープしているためだと思われます。for ループの反復ごとに新しい go ルーチンが開始されていませんか? 最終的にチャネルから印刷するものがあるはずではありませんか?

func (u* uniprot) produce(n string) {
    u.namesInDir <- n
}   

func (u* uniprot) consume() {
    fmt.println(<-u.namesInDir)
}       

func (u* uniprot) readFilenames(dirname string) {
    u.namesInDir = make(chan string, 15)
    dir, err := os.Open(dirname)
    errorCheck(err) 
    names, err := dir.Readdirnames(0)
    errorCheck(err)
    for _, n := range names {
        go u.produce(n)
        go u.consume()
    }
}
4

1 に答える 1