Maison >développement back-end >Golang >Comment puis-je détecter le contenu lisible sur STDIN dans Go sans blocage ?

Comment puis-je détecter le contenu lisible sur STDIN dans Go sans blocage ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-15 21:00:18279parcourir

How Can I Detect Readable Content on STDIN in Go Without Blocking?

Détection du contenu lisible sur STDIN dans Go

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.

Solution

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!

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