In Go ist die Interaktion mit der Standardeingabe (stdin) oft eine entscheidende Aufgabe bei der Arbeit mit Befehlen und Pipelines. Es kann jedoch eine Herausforderung sein, festzustellen, ob stdin über Daten verfügt, ohne die Ausführung des Programms zu blockieren.
Das Dateiobjekt os.Stdin stellt stdin dar und verfügt über ähnliche Funktionen wie andere Dateiobjekte in Go. Dadurch können wir die Stat-Funktion nutzen, um Informationen über stdin, einschließlich seiner Größe, zu sammeln.
Um festzustellen, ob stdin Daten enthält, können wir seine Größe mit dem folgenden Code überprüfen:
<code class="go">func main() { file := os.Stdin fi, err := file.Stat() if err != nil { fmt.Println("file.Stat()", err) } size := fi.Size() if size > 0 { fmt.Printf("%v bytes available in Stdin\n", size) } else { fmt.Println("Stdin is empty") } }</code>
Wenn dieser Code in eine ausführbare Datei kompiliert wird, kann er als Filter zum Verarbeiten von Eingaben verwendet werden, die an stdin weitergeleitet werden. Führen Sie beispielsweise den Befehl echo test | aus ./executable würde „5 Bytes verfügbar in Stdin“ auf der Konsole ausgeben, was darauf hinweist, dass Stdin Daten enthält. Umgekehrt würde beim Ausführen von ./executable ohne Eingabe „Stdin ist leer“ angezeigt.
Dieser Ansatz ermöglicht es Entwicklern, ohne Blockierung nach Daten in stdin zu suchen und mit der Logik ihres Programms entsprechend fortzufahren. Dies ist besonders nützlich, wenn Sie mit Pipelines arbeiten oder Benutzereingaben von stdin verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich in Stdin nach Daten suchen, ohne sie in Go zu blockieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!