【问题标题】:golang reading long text from stdingolang 从标准输入读取长文本
【发布时间】:2016-12-30 21:27:47
【问题描述】:

我想从 os.Stdin 读取长文本,但无法实现。已经阅读了该主题的所有内容,尝试了应该可以工作的代码。无论如何,每种方法都会在 4096 个字符后剪切。

例如。 here 是一个工作示例。循环第一次运行后,它读取前 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 共享的链接,我得到了以下信息:我的输入只有一行包含空格分隔的整数。当我将空格更改为换行符时,它起作用了。但是由于hackerrate的练习格式使用了很长的空格分隔线,所以问题仍然存在,需要改进。

【问题讨论】:

标签: go stdin longtext


【解决方案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的配置有误,我已经让他们找出来了。

【讨论】:

    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 2015-07-24
    • 2014-05-27
    • 2017-09-07
    • 1970-01-01
    • 2018-04-06
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多