2016-04-22 21 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上的第一天。 –