Maison >développement back-end >Golang >Comment puis-je détecter si l'entrée STDIN de Go provient d'un tuyau ou d'un terminal ?
Détection de la disponibilité des données STDIN dans Go
Dans votre code, vous souhaitez faire la distinction entre le moment où les données sont acheminées vers STDIN et le moment où elles sont exécutées depuis un terminal. Le défi consiste à résoudre la nature bloquante de ioutil.ReadAll(), qui attend indéfiniment une entrée lorsque STDIN est vide.
Solution : Utiliser os.ModeCharDevice
Pour Pour résoudre ce problème, nous pouvons exploiter os.ModeCharDevice pour déterminer si STDIN est associé à un terminal ou à un canal. Voici comment :
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") } }
Explication :
if (stat.Mode() & os.ModeCharDevice) == 0 : Vérifie si le STDIN le mode fichier n'a pas le bit os.ModeCharDevice défini.
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!