Dieses Codefragment befasst sich mit dem Problem der Überprüfung der Eingabe auf der Standardeingabe (STDIN) mithilfe der Go-Sprache. Insbesondere stößt der Benutzer auf eine Situation, in der sich sein Befehlszeilendienstprogramm aufgrund des Vorhandenseins einer Zeichenfolge, die an STDIN weitergeleitet wird, anders verhalten muss.
Der bereitgestellte Beispielcode verwendet ioutil.ReadAll(os.Stdin) Funktion zum Lesen aller Bytes von STDIN. Wenn die Länge des Byte-Arrays größer als Null ist, gibt der Code eine entsprechende Meldung aus, die angibt, dass etwas auf STDIN verfügbar ist. Wenn jedoch nichts auf STDIN vorhanden ist, kann der Code beim Warten auf eine End-of-File-Markierung (EOF) hängen bleiben.
Um dieses Problem zu beheben, nutzt der Code das Flag os.ModeCharDevice, um zu bestimmen, ob STDIN kommt von einem Terminal oder einer Leitung. Wenn das Flag „os.ModeCharDevice“ nicht gesetzt ist, zeigt dies an, dass Daten an STDIN weitergeleitet werden, und der Code gibt eine entsprechende Meldung aus. Andernfalls wird davon ausgegangen, dass STDIN von einem Terminal kommt.
Hier ist der geänderte Codeausschnitt, der die os.ModeCharDevice-Prüfung enthält:
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") }
Dieser Code ermöglicht dem Befehlszeilendienstprogramm effektiv die Unterscheidung zwischen der Pipe-Eingabe und der direkten Terminal-Eingabe, sodass es sich entsprechend verhält.
Das obige ist der detaillierte Inhalt vonWie kann ich feststellen, ob STDIN Daten in Go enthält?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!