2016-04-22 93 views
0

我正在使它停止在CTRL-C上询问输入。如何从等待用户输入中退出reader.ReadString?

我目前所拥有的是一个单独的go-routine在接收到CTRL-C后会改变一个变量的值,所以它不会要求另一行。但是,我似乎无法找到解决当前线路的方法。

即我仍然需要按一次输入,才能退出当前正在阅读的\ n的迭代。

是否有一种方法可以将“\ n”推入标准读取器中,读取读取字符串。或者完全停止它的执行。

+0

没有输入值就无法中断读取stdin。您需要将读取挂起并忽略它,或者在您拥有所需内容时不要开始新的读取。 – JimB

回答

0

是去给你继续当任两件事情时发生的唯一体面的机制是selectselect只选择在通道读取,所以你唯一的选择就是改变你的信号处理程序的goroutine写入通道,并添加另一个处理stdin并将输入行传递给通道的goroutine,然后选择两个通道。

但是,这仍然使您的问题没有得到答案:您的主程序可能会停止等待Ctrl-C上的输入,但是正在读取输入的goroutine仍将等待输入。在某些情况下,这可能是好的......如果你再也不需要stdin,或者你会以相同的方式回到处理线。但是,如果您想从该读者那里执行其他而不是ReadString,那么您会被卡住......字面意思。我所看到的唯一解决方案就是编写自己的状态机,可以在ReadReadByte之间编写自己的状态机,它可以根据外部条件改变其行为,但这很容易变得非常复杂。

基本上,这看起来像Go相比底层系统简化了一些事情(不会暴露像EINTR之类的东西,不允许在文件句柄上选择),但最终会给程序员提供更少的电力。

+0

不知道这将在代码中看起来如何。这仍然是我在Go上的第一天。 –