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 サイトの他の関連記事を参照してください。