ホームページ > バックエンド開発 > Golang > Go コマンドはパイプからデータを受信して​​いますか?

Go コマンドはパイプからデータを受信して​​いますか?

Mary-Kate Olsen
リリース: 2024-11-05 03:27:02
オリジナル
718 人が閲覧しました

Is My Go Command Receiving Data from a Pipe?

コマンドが Go でパイプされているかどうかを確認するには?

Go で入力と出力を操作する場合、多くの場合、次のことを確認する必要があります。コマンドがパイプ処理されているかどうか。パイプ処理を使用すると、Unix パイプを介して、あるプロセスの出力から別のプロセスの入力にデータを渡すことができます。

例:

<code class="sh">cat test.txt | mygocommand # Piped
mygocommand # Not piped</code>
ログイン後にコピー

この区別は、アプリケーションの動作をカスタマイズする場合に重要です。 .

解決策

Go は、os.Stdin.Stat() を使用して stdin がパイプされているかどうかを確認する方法を提供します。以下に例を示します。

<code class="go">package main

import (
    "fmt"
    "os"
)

func main() {
    fi, _ := os.Stdin.Stat()

    if (fi.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is from pipe")
    } else {
        fmt.Println("data is from terminal")
    }
}</code>
ログイン後にコピー

コマンドがパイプ処理されると (最初の例のように)、出力は次のようになります:

data is from pipe
ログイン後にコピー

それ以外の場合は、次のようになります:

data is from terminal
ログイン後にコピー

仕組み

os.Stdin.Stat() 関数は、stdin ファイル記述子に関する情報を含む FileInfo オブジェクトを返します。 FileInfo の Mode() メソッドは、ファイルの種類に関する情報を含むファイル モードを返します。返されたモードに os.ModeCharDevice フラグが含まれている場合、ファイルが端末などのキャラクタ デバイスであることを示します。そうでない場合は、ファイルが通常のファイルまたはパイプであることを示します。

以上がGo コマンドはパイプからデータを受信して​​いますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート