在 Go 中,在使用命令和管道时,与标准输入 (stdin) 交互通常是一项关键任务。然而,在不阻塞程序执行的情况下确定 stdin 是否有数据可能具有挑战性。
os.Stdin 文件对象代表 stdin,它拥有与 Go 中其他文件对象类似的功能。这使我们能够利用 Stat 函数来收集有关 stdin 的信息,包括其大小。
要确定 stdin 是否包含数据,我们可以使用以下代码检查其大小:
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")
}
}
当此代码编译为可执行文件时,它可以用作过滤器来处理通过管道传输到 stdin 的输入。例如,执行命令 echo test | ./executable 会在控制台打印“5 bytes available in Stdin”,表明 stdin 包含数据。相反,在没有任何输入的情况下运行 ./executable 将显示“Stdin 为空”。
这种方法允许开发人员在不阻塞的情况下检查 stdin 中的数据,并相应地继续执行程序的逻辑。当使用管道或处理来自 stdin 的用户输入时,它特别有用。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3