2016-04-22 3 views
0

私はCTRL-Cで入力を求めないようにしています。reader.ReadStringを終了してユーザーの入力を待つことはできますか?

私が現在行っていることは、別のジャンプルーチンがCTRL-Cを受け取ると変数の値を変更して別の行を要求しないことです。しかし、私は現在の行を回避する方法を見つけることができません。

つまり、Enterキーを押すと、\ nの現在の読み込みから抜け出すことができます。

"\ n"をstdinにプッシュする方法がありますか。またはその実行を完全に停止する方法。

+0

値を入力せずにstdinの読み取りを中断する方法はありません。あなたは読んだままにするか、それを無視するか、一度あなたが望むものを持っていれば新しい読書を始める必要があります。 – JimB

答えて

0

Goは二つのいずれかが発生したときに続行するあなたを与えるだけまともなメカニズムはselectで、selectのみ読み込みチャネルに選択し、ので、あなたの唯一のオプションは、チャネルへの書き込みにあなたのシグナル・ハンドラ・ゴルーチンを変更することですstdinを扱う別のゴルーチンを追加し、入力行をチャンネルに渡してから、2つのチャンネルを選択します。

しかし、あなたのメインプログラムはCtrl-Cでの入力待ちを止めることができますが、入力を読み込んでいるゴルーチンはまだ入力を待っています。いくつかのケースでは大丈夫かもしれません...あなたが再び標準入力を必要としない場合、または同じ正確な方法で処理ラインに戻る場合は、しかし、あなたが何かしたい場合はReadStringより、あなたは固執しています...文字通り。私が見る唯一の解決策は、外部状況に応じて動作を変更することができるReadまたはReadByteの周りに独自の状態マシンを書くことですが、それは簡単にひどく複雑になる可能性があります。

基本的に、これは、下にあるシステム(ファイルハンドルの選択を許可しないEINTRのようなものを公開しない)に比べてGoを単純化する場合のように見えますが、最終的にはプログラマーに電力を供給しません。

+0

コード内でどのように見えるかわからないそれはまだ私の最初の日です。 –