Maison >développement back-end >Golang >Comment puis-je vérifier les entrées disponibles sur STDIN dans Golang ?
Vérification des entrées disponibles sur STDIN dans Golang
Dans certains scénarios de ligne de commande, comprendre si une entrée existe sur stdin est crucial pour un comportement personnalisé . Prenons l'exemple suivant :
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") } }
Pendant que ce code fonctionne pour les entrées redirigées, il s'arrête à ioutil.ReadAll(os.Stdin) lorsqu'aucune entrée n'est présente. Cet article aborde ce problème en proposant une solution pour déterminer la disponibilité des données stdin.
Solution : vérifier le mode fichier
La solution réside dans l'examen du mode fichier de le flux stdin. Lorsque stdin est un fichier normal (par exemple, un terminal), son mode inclut os.ModeCharDevice, indiquant l'état du périphérique de caractères. À l’inverse, si l’entrée est redirigée, le mode n’a pas cet indicateur. Le code suivant illustre cette approche :
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") } }
Avec cette modification, votre programme peut faire la distinction entre les entrées stdin canalisées et basées sur le terminal, permettant des ajustements de comportement appropriés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!