ホームページ  >  記事  >  バックエンド開発  >  Golang の io.PipeRaeder でノンブロッキング Read() を実行する方法

Golang の io.PipeRaeder でノンブロッキング Read() を実行する方法

WBOY
WBOY転載
2024-02-10 11:10:17389ブラウズ

如何在 Golang 中对 io.PipeRaeder 进行非阻塞 Read()

Golang では、io.PipeReader が一般的に使用されるリーダーですが、読み取るデータがない場合、その Read() メソッドはプログラムの実行をブロックします。では、io.PipeReader のノンブロッキング読み取りを実装するにはどうすればよいでしょうか? PHP エディター Xiaoxin が解決策を提供し、select と goroutine を使用することで、io.PipeReader のノンブロッキング読み取りを実現し、プログラムの応答性と同時実行性を向上させることができます。以下にこの機能の実装方法とサンプルコードを詳しく紹介します。

質問内容

次のコードがあります。 5 秒後、実行可能ファイルはテキストを標準出力に送信します。したがって、in.readline() はデータが受信されるまでブロックされます。 readline() のタイムアウトを設定したり、ブロックしない方法で実行したりするにはどうすればよいですか?

package main

import (
    "bufio"
    "fmt"
    "io"
    "os/exec"
)

func main() {
    cmd := exec.Command("/path/to/executable")

    stdoutReader, stdoutWriter := io.Pipe()

    cmd.Stdout = stdoutWriter

    cmd.Start()

    in := bufio.NewReader(stdoutReader)
    b, _, _ := in.ReadLine()

    fmt.Println(string(b))
}

解決策

コメントありがとうございます。なるほど。

リーリー

以上がGolang の io.PipeRaeder でノンブロッキング Read() を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。