如何使用Stdin获取输入并等到Golang中的Stdin中有新数据

时间:2017-10-26 15:08:58

标签: go

每次在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
 }

有人可以帮助我找到解决问题的方法。

1 个答案:

答案 0 :(得分:0)

您可以将Scan来电包裹在一个循环中:

for text := ""; text != ""; {
    for scanner.Scan() {
        text = scanner.Text()
        // ...
    }
}

即使用户输入空输入,这也会产生循环的副作用。