"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como verificar dados em Stdin sem bloquear em Go?

Como verificar dados em Stdin sem bloquear em Go?

Publicado em 19/11/2024
Navegar:573

How to Check for Data in Stdin without Blocking in Go?

Verificação de dados em Stdin com Go

No Go, interagir com entrada padrão (stdin) costuma ser uma tarefa crucial ao trabalhar com comandos e pipelines. No entanto, determinar se stdin possui dados sem bloquear a execução do programa pode ser um desafio.

O objeto de arquivo os.Stdin representa stdin e possui recursos semelhantes a outros objetos de arquivo em Go. Isso nos permite aproveitar a função Stat para coletar informações sobre stdin, incluindo seu tamanho.

Para verificar se stdin contém dados, podemos verificar seu tamanho usando o seguinte código:

func main() {
    file := os.Stdin
    fi, err := file.Stat()
    if err != nil {
        fmt.Println("file.Stat()", err)
    }
    size := fi.Size()
    if size > 0 {
        fmt.Printf("%v bytes available in Stdin\n", size)
    } else {
        fmt.Println("Stdin is empty")
    }
}

Quando este código é compilado em um executável, ele pode ser usado como um filtro para processar a entrada canalizada para stdin. Por exemplo, executando o comando echo test | ./executable imprimiria "5 bytes disponíveis em Stdin" no console, indicando que stdin contém dados. Por outro lado, executar ./executable sem qualquer entrada exibiria "Stdin está vazio."

Essa abordagem permite que os desenvolvedores verifiquem dados em stdin sem bloquear e prossigam com a lógica do programa de acordo. É particularmente útil ao trabalhar com pipelines ou manipular a entrada do usuário em stdin.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3