ホームページ >バックエンド開発 >Golang >Golang で STDIN で利用可能な入力を確認するにはどうすればよいですか?

Golang で STDIN で利用可能な入力を確認するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-18 20:06:11622ブラウズ

How Can I Check for Available Input on STDIN in Golang?

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 サイトの他の関連記事を参照してください。

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