"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo determinar si la entrada se canaliza en Go?

¿Cómo determinar si la entrada se canaliza en Go?

Publicado el 2024-12-11
Navegar:949

How to Determine if Input is Piped in Go?

Determinación de la entrada canalizada en Go

Comprender si un comando está canalizado es crucial en las aplicaciones Go, especialmente cuando se procesan datos de diversas fuentes. Este artículo explora cómo determinar si un comando se canaliza o no, lo que permite a los desarrolladores adaptar su código en consecuencia.

Solución

Go proporciona os.Stdin.Stat( ) función para recuperar la información del archivo asociada con la entrada estándar. Esta información incluye el modo de archivo, que indica si la entrada es de una terminal o de una tubería. El siguiente fragmento de código demuestra cómo utilizar os.Stdin.Stat() para este propósito:

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")
    }
}

Cuando el comando se canaliza, fi.Mode() & os.ModeCharDevice se evalúa como 0, lo que indica que la entrada no proviene de un dispositivo de caracteres (como una terminal). Por el contrario, un valor distinto de cero significa que la entrada proviene de un dispositivo de caracteres.

Este enfoque proporciona una forma confiable de distinguir entre entradas canalizadas y no canalizadas, lo que permite a los desarrolladores adaptar el comportamiento de sus aplicaciones en consecuencia.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3