ホームページ >バックエンド開発 >Golang >Go で STDIN にデータが含まれているかどうかを検出するにはどうすればよいですか?

Go で STDIN にデータが含まれているかどうかを検出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 12:32:15221ブラウズ

How Can I Detect if STDIN Contains Data in Go?

Go での STDIN の入力のチェック

このコード スニペットは、Go 言語を使用した標準入力 (STDIN) の入力のチェックの問題に対処します。特に、ユーザーは、STDIN にパイプされる文字列の存在に基づいて、コマンド ライン ユーティリティが異なる動作をする必要がある状況に遭遇します。

提供されているサンプル コードでは、ioutil.ReadAll(os.Stdin) が使用されています。 STDIN からすべてのバイトを読み取る関数。バイト配列の長さがゼロより大きい場合、コードは STDIN で何かが利用可能であることを示す適切なメッセージを出力します。ただし、STDIN に何もない場合、コードはファイルの終わり (EOF) マーカーを待ったままスタックする可能性があります。

この問題を解決するには、コードは os.ModeCharDevice フラグを利用して STDIN かどうかを判断します。ターミナルまたはパイプから来ています。 os.ModeCharDevice フラグが設定されていない場合は、データが STDIN にパイプされていることを示し、コードはそれに応じてメッセージを出力します。それ以外の場合は、STDIN が端末からのものであると想定します。

os.ModeCharDevice チェックを組み込んだ変更されたコード スニペットは次のとおりです。

stat, _ := os.Stdin.Stat()
if (stat.Mode() & os.ModeCharDevice) == 0 {
    fmt.Println("data is being piped to stdin")
} else {
    fmt.Println("stdin is from a terminal")
}

このコードにより、コマンド ライン ユーティリティは効果的に区別できるようになります。パイプ入力と直接端子入力の間で接続し、それに応じて動作できるようにします。

以上がGo で STDIN にデータが含まれているかどうかを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。