Supposons que vous souhaitiez qu'un outil de ligne de commande se comporte différemment en fonction de la présence d'une entrée sur STDIN. Cependant, l'utilisation directe de ioutil.ReadAll(os.Stdin) peut entraîner un comportement inattendu.
En particulier, si l'outil est appelé sans aucune entrée STDIN, le programme attendra indéfiniment une entrée, l'empêchant de continuer. plus loin.
Pour résoudre ce problème, vous pouvez utiliser os.Stdin.Stat() pour vérifier si le descripteur de fichier STDIN est un dispositif de caractère. L'extrait de code suivant montre comment y parvenir :
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") } }
Lorsque l'indicateur ModeCharDevice est effacé pour le fichier STDIN, cela indique que les données sont redirigées vers le STDIN. Sinon, cela suggère que STDIN est connecté à un terminal. En cochant ce drapeau, vous pouvez déterminer s'il y a ou non quelque chose à lire sur STDIN sans bloquer le programme.
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!