Go での STDIN データの可用性の検出
コードでは、データが STDIN にパイプされるときと実行されるときを区別することを目的としています。端末から。課題は、STDIN が空の場合に入力を無期限に待機する ioutil.ReadAll() のブロック的な性質に対処することにあります。
解決策: os.ModeCharDevice
を使用するこの問題を解決するには、os.ModeCharDevice を利用して、STDIN が端末とパイプのどちらに関連付けられているかを判断できます。方法は次のとおりです:
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") } }
説明:
if (stat.Mode() & os.ModeCharDevice) == 0: STDIN ファイル モードに os.ModeCharDevice ビットが設定されていないかどうかを確認します。
以上がGo の STDIN 入力がパイプからのものかターミナルからのものかをどのように検出できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。