每次在Stdin中有新输入时我都需要执行一段代码,但如果Stdin中没有任何内容,程序不应该终止,而是应该等待Stdin中的新数据,然后运行计算代码那个数据。
如何在Golang实现这一目标?下面是代码片段:
stat, _ := os.Stdin.Stat()
if (stat.Mode() & os.ModeCharDevice) == 0 {
fmt.Println("data is being piped to stdin")
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
text:= scanner.Text()
fmt.Println(text)
// do some computation ....
} else {
fmt.Println("No data in stdin")
// wait until there is new data in Stdin
}
有人可以帮助我找到解决问题的方法。
答案 0 :(得分:0)
您可以将Scan
来电包裹在一个循环中:
for text := ""; text != ""; {
for scanner.Scan() {
text = scanner.Text()
// ...
}
}
即使用户输入空输入,这也会产生循环的副作用。