このコード スニペットは、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 サイトの他の関連記事を参照してください。