Heim >Backend-Entwicklung >Golang >Wie kann ich in Golang nach verfügbaren Eingaben für STDIN suchen?

Wie kann ich in Golang nach verfügbaren Eingaben für STDIN suchen?

DDD
DDDOriginal
2024-12-18 20:06:11631Durchsuche

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

Prüfung auf verfügbare Eingaben auf STDIN in Golang

In bestimmten Befehlszeilenszenarien ist das Verständnis, ob Eingaben auf stdin vorhanden sind, für maßgeschneidertes Verhalten von entscheidender Bedeutung . Betrachten Sie das folgende Beispiel:

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")
    }
}

Während dieser Code für weitergeleitete Eingaben funktioniert, stoppt er bei ioutil.ReadAll(os.Stdin), wenn keine Eingabe vorhanden ist. Dieser Artikel befasst sich mit diesem Problem und bietet eine Lösung zur Bestimmung der Verfügbarkeit von Standarddaten.

Lösung: Überprüfen des Dateimodus

Die Lösung liegt in der Untersuchung des Dateimodus von der stdin-Stream. Wenn stdin eine reguläre Datei ist (z. B. ein Terminal), enthält ihr Modus os.ModeCharDevice, der den Status des Zeichengeräts anzeigt. Wenn die Eingabe hingegen über eine Pipeline erfolgt, fehlt dem Modus dieses Flag. Der folgende Code demonstriert diesen Ansatz:

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")
    }
}

Mit dieser Änderung kann Ihr Programm zwischen Pipe- und Terminal-basierten stdin-Eingaben unterscheiden und so entsprechende Verhaltensanpassungen ermöglichen.

Das obige ist der detaillierte Inhalt vonWie kann ich in Golang nach verfügbaren Eingaben für STDIN suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn