Голанг читает длинный текст со стандартного ввода

Я хочу прочитать длинный текст от os.Stdin, но не могу этого сделать. Уже все прочитал в теме, пробовал коды, которые должны работать. Каждый метод вырезает после 4096 символов, несмотря ни на что.

Например. Вот рабочий пример. После первого запуска цикла он считывает первые 4096 символов, а затем ожидает дополнительной обработки при каждом вводе, пока я не завершу его с помощью EOF (Ctrl+D). То же самое для fmt.Scan, bufio.NewScanner, bufio ReadLine, ioutil.ReadAll. Если я сохраню его в файл и прочту, он будет работать как положено. С stdin это не так.

Я нахожусь на Arch Linux, 32 бит, Go 1.7, протестирован в mate-терминал 1.14, tty 8.25, то же самое в обоих из них. И то же самое происходит на странице hackerrank.com, я не знаю, какую технологию они используют.

Пожалуйста помоги!

РЕДАКТИРОВАТЬ:

Мой ввод чуть длиннее, чем 4096 символов. Я проверил ссылку, которой поделился Amd, и получил следующее: мой ввод - только одна строка, содержащая целые числа через пробел. Когда я изменил пробелы на новые строки, это сработало. Но так как формат упражнения на хакеррате использует длинные разделенные пробелами строки, проблема все еще остается, с уточнением.

1 ответ

Решение

Я смог решить эту проблему благодаря Иану Лэнсу Тейлору: https://groups.google.com/forum/

Таким образом, 4096 символов - это предел моей системы через параметр ядра N_TTY_BUF_SIZE. То же самое сработало с cat и Python.

Во всяком случае, на hackerrank.com мне удалось выполнить то же упражнение в Python, поэтому я думаю, что у них неправильная конфигурация для Go, я уже попросил их выяснить это.

Другие вопросы по тегам