在 Go 中,与标准输入 (stdin) 交互通常是使用命令和管道时的一项关键任务。然而,在不阻塞程序执行的情况下确定 stdin 是否有数据可能具有挑战性。
os.Stdin 文件对象代表 stdin,它拥有与 Go 中其他文件对象类似的功能。这使我们能够利用 Stat 函数来收集有关 stdin 的信息,包括其大小。
要确定 stdin 是否包含数据,我们可以使用以下代码检查其大小:
<code class="go">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") } }</code>
当此代码编译为可执行文件时,它可以用作过滤器来处理通过管道传输到 stdin 的输入。例如,执行命令 echo test | ./executable 会在控制台打印“5 bytes available in Stdin”,表明 stdin 包含数据。相反,在没有任何输入的情况下运行 ./executable 将显示“Stdin 为空。”
这种方法允许开发人员在不阻塞的情况下检查 stdin 中的数据,并相应地继续执行程序的逻辑。当使用管道或处理来自标准输入的用户输入时,它特别有用。
以上是如何在 Go 中不阻塞地检查 Stdin 中的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!