Maison >développement back-end >Golang >Comment puis-je vérifier les entrées disponibles sur STDIN dans Golang ?

Comment puis-je vérifier les entrées disponibles sur STDIN dans Golang ?

DDD
DDDoriginal
2024-12-18 20:06:11631parcourir

How Can I Check for Available Input on STDIN in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn