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

WBOY
リリース: 2024-02-10 11:10:17
転載
389 人が閲覧しました

如何在 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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!