Comment déterminer si une commande est redirigée dans Go ?
Lorsque vous travaillez avec des entrées et des sorties dans Go, il est souvent nécessaire de déterminer si une commande est diffusée ou non. Le piping permet de transmettre des données de la sortie d'un processus à l'entrée d'un autre via un tube Unix.
Par exemple :
<code class="sh">cat test.txt | mygocommand # Piped mygocommand # Not piped</code>
Cette distinction peut être importante pour personnaliser le comportement de votre application. .
Solution
Go fournit un moyen de vérifier si stdin est redirigé en utilisant os.Stdin.Stat(). Voici un exemple :
<code class="go">package main import ( "fmt" "os" ) func main() { fi, _ := os.Stdin.Stat() if (fi.Mode() & os.ModeCharDevice) == 0 { fmt.Println("data is from pipe") } else { fmt.Println("data is from terminal") } }</code>
Lorsque la commande est redirigée (comme dans le premier exemple), le résultat sera :
data is from pipe
Sinon, ce sera :
data is from terminal
Comment ça marche
La fonction os.Stdin.Stat() renvoie un objet FileInfo contenant des informations sur le descripteur de fichier stdin. La méthode Mode() de FileInfo renvoie un mode de fichier qui inclut des informations sur le type de fichier. Si le mode renvoyé inclut l'indicateur os.ModeCharDevice, cela indique que le fichier est un périphérique de caractères, tel qu'un terminal. Si ce n'est pas le cas, cela indique que le fichier est un fichier normal ou un tube.
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!