Golang で STDIN で利用可能な入力を確認する
特定のコマンドライン シナリオでは、入力が stdin に存在するかどうかを理解することが、調整された動作にとって重要です。次の例を考えてみましょう。
package main import ( "fmt" "io/ioutil" "os" ) func main() { bytes, _ := ioutil.ReadAll(os.Stdin) if len(bytes) > 0 { fmt.Println("Something on STDIN: " + string(bytes)) } else { fmt.Println("Nothing on STDIN") } }
このコードはパイプ入力に対して機能しますが、入力が存在しない場合は ioutil.ReadAll(os.Stdin) で停止します。この記事では、この問題に対処し、stdin データの可用性を判断する解決策を提供します。
解決策: ファイル モードの確認
解決策は、ファイル モードを調べることです。標準入力ストリーム。 stdin が通常のファイル (ターミナルなど) の場合、そのモードにはキャラクター デバイスのステータスを示す os.ModeCharDevice が含まれます。逆に、入力がパイプ接続されている場合、モードにはこのフラグがありません。次のコードは、このアプローチを示しています。
package main import ( "fmt" "os" ) func main() { 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") } }
この変更により、プログラムはパイプ接続された stdin 入力とターミナルベースの stdin 入力を区別できるようになり、適切な動作の調整が可能になります。
以上がGolang で STDIN で利用可能な入力を確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。