在 Go 中检测 STDIN 数据可用性
在代码中,您的目标是区分数据何时通过管道传输到 STDIN 以及何时执行从终端。挑战在于解决 ioutil.ReadAll() 的阻塞性质,当 STDIN 为空时,它会无限期地等待输入。
解决方案:使用 os.ModeCharDevice
为了解决这个问题,我们可以利用 os.ModeCharDevice 来确定 STDIN 是否与终端或管道关联。操作方法如下:
package main import ( "fmt" "os" ) func main() { 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") } }
说明:
if (stat.Mode() & os.ModeCharDevice) == 0:检查 STDIN 文件模式是否未设置 os.ModeCharDevice 位。
以上是如何检测 Go 的 STDIN 输入是来自管道还是终端?的详细内容。更多信息请关注PHP中文网其他相关文章!