此代码片段解决了使用 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中文网其他相关文章!