Ermitteln der STDIN-Datenverfügbarkeit in Go
In Ihrem Code möchten Sie unterscheiden, wann Daten an STDIN weitergeleitet werden und wann sie ausgeführt werden von einem Terminal aus. Die Herausforderung besteht darin, die blockierende Natur von ioutil.ReadAll() anzugehen, das unbegrenzt auf Eingaben wartet, wenn STDIN leer ist.
Lösung: Verwendung von os.ModeCharDevice
Zu Um dieses Problem zu lösen, können wir os.ModeCharDevice nutzen, um festzustellen, ob STDIN einem Terminal oder einer Pipe zugeordnet ist. So geht's:
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") } }
Erklärung:
if (stat.Mode() & os.ModeCharDevice) == 0: Prüft wenn im STDIN-Dateimodus das os.ModeCharDevice-Bit nicht gesetzt ist.
Das obige ist der detaillierte Inhalt vonWie kann ich erkennen, ob die STDIN-Eingabe von Go von einer Pipe oder einem Terminal stammt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!