Heim >Backend-Entwicklung >Golang >Empfängt mein Go-Befehl Daten von einer Pipe?
Wie stellt man fest, ob ein Befehl in Go weitergeleitet wird?
Bei der Arbeit mit Eingabe und Ausgabe in Go ist es oft notwendig, festzustellen, ob ob ein Befehl weitergeleitet wird oder nicht. Durch Piping können Daten über eine Unix-Pipe von der Ausgabe eines Prozesses an die Eingabe eines anderen Prozesses übergeben werden.
Zum Beispiel:
<code class="sh">cat test.txt | mygocommand # Piped mygocommand # Not piped</code>
Diese Unterscheidung kann für die Anpassung des Verhaltens Ihrer Anwendung wichtig sein .
Lösung
Go bietet eine Möglichkeit, mithilfe von os.Stdin.Stat() zu überprüfen, ob stdin weitergeleitet wird. Hier ist ein Beispiel:
<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>
Wenn der Befehl weitergeleitet wird (wie im ersten Beispiel), lautet die Ausgabe:
data is from pipe
Andernfalls lautet sie:
data is from terminal
So funktioniert es
Die Funktion os.Stdin.Stat() gibt ein FileInfo-Objekt zurück, das Informationen über den stdin-Dateideskriptor enthält. Die Mode()-Methode von FileInfo gibt einen Dateimodus zurück, der Informationen über den Dateityp enthält. Wenn der zurückgegebene Modus das Flag os.ModeCharDevice enthält, zeigt dies an, dass es sich bei der Datei um ein Zeichengerät, z. B. ein Terminal, handelt. Ist dies nicht der Fall, weist dies darauf hin, dass es sich bei der Datei um eine reguläre Datei oder eine Pipe handelt.
Das obige ist der detaillierte Inhalt vonEmpfängt mein Go-Befehl Daten von einer Pipe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!