Go でブロックせずに STDIN 上の読み取り可能なコンテンツを検出するにはどうすればよいですか?
Dec 15, 2024 pm 09:00 PMGo での STDIN 上の読み取り可能なコンテンツの検出
STDIN 上の入力の存在に基づいて、コマンド ライン ツールの動作が異なるようにしたいとします。ただし、ioutil.ReadAll(os.Stdin) を直接使用すると、予期しない動作が発生する可能性があります。
特に、STDIN 入力なしでツールが呼び出された場合、プログラムは入力を無期限に待機し、処理を続行できなくなります。
解決策
この問題を解決するには、os.Stdin.Stat() を利用して、 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") } }
STDIN ファイルの ModeCharDevice フラグがクリアされると、データが STDIN にパイプされていることを示します。それ以外の場合は、STDIN が端末に接続されていることを示します。このフラグをチェックすることで、プログラムをブロックすることなく、STDIN に読み取るものがあるかどうかを判断できます。
以上がGo でブロックせずに STDIN 上の読み取り可能なコンテンツを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか?
