4

os.Stdin から長いテキストを読みたいのですが、実現できません。件名のすべてを既に読んで、動作するはずのコードを試しました。すべてのメソッドは、何があっても 4096 文字を切り捨てます。

例えば。これが実際の例です。ループの最初の実行後、最初の 4096 文字を読み取り、EOF (Ctrl+D) で終了するまで、入力するたびにさらに処理を待ちます。fmt.Scan、bufio.NewScanner、bufio ReadLine、ioutil.ReadAll についても同様です。ファイルに保存して読み取ると、期待どおりに動作します。標準入力からはそうではありません。

私はArch Linux、32ビット、Go 1.7を使用しており、mate-terminal 1.14、tty 8.25でテストされており、両方で同じです。hackerrank.com のページでも同じことが起こっていますが、彼らがどのような技術を使用しているのかはわかりません。

助けてください!

編集:

私の入力は 4096 文字より少し長いだけです。Amdが共有しているリンクを確認したところ、次の情報が得られました。私の入力は、スペースで区切られた整数を含む 1 行のみです。スペースを改行に変更すると、うまくいきました。しかし、hackerrate の演習形式ではスペースで区切られた長い行が使用されるため、問題はまだ解決されていません。

4

1 に答える 1

1

Ian Lance Taylor のおかげでこれを解決できました: https://groups.google.com/forum/#!topic/golang-nuts/ndh-1wdsWYs

したがって、4096 文字は N_TTY_BUF_SIZE カーネル パラメータによる私のシステムの制限です。同じことが cat と Python でも機能しました。

とにかく、hackerrank.com で Python で同じ演習を解決できたので、Go の構成が間違っていると思います。私はすでに彼らにそれを見つけるよう依頼しました。

于 2016-09-20T09:52:56.030 に答える