首页 > 后端开发 > Golang > Go中如何检测STDIN是否包含数据?

Go中如何检测STDIN是否包含数据?

Barbara Streisand
发布: 2024-12-10 12:32:15
原创
277 人浏览过

How Can I Detect if STDIN Contains Data in Go?

在 Go 中检查 STDIN 上的输入

此代码片段解决了使用 Go 语言检查标准输入 (STDIN) 上的输入的问题。特别是,用户遇到这样的情况:他们的命令行实用程序需要根据通过管道传输到 STDIN 的字符串的存在而采取不同的行为。

提供的示例代码使用 ioutil.ReadAll(os.Stdin)函数从 STDIN 读取所有字节。如果字节数组的长度大于零,代码将打印一条适当的消息,指示 STDIN 上有可用的内容。但是,当 STDIN 上没有任何内容时,代码可能会陷入等待文件结束 (EOF) 标记的状态。

为了解决此问题,代码利用 os.ModeCharDevice 标志来确定 STDIN 是否存在来自终端或管道。如果未设置 os.ModeCharDevice 标志,则表明数据正在通过管道传输到 STDIN,并且代码会相应地打印一条消息。否则,它假设 STDIN 来自终端。

这是合并了 os.ModeCharDevice 检查的修改后的代码片段:

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")
}
登录后复制

此代码有效地允许命令行实用程序区分在管道输入和直接终端输入之间,使其能够相应地运行。

以上是Go中如何检测STDIN是否包含数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板