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!