golang 从 stdin 读取长文本
golang reading long text from stdin
我想阅读来自 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 共享的 link,得到以下信息:我的输入只有一行包含 space 分隔的整数。当我将 spaces 更改为换行符时,它起作用了。但是由于hackerrate上的练习格式使用长space分隔的行,所以问题仍然存在,并进行了细化。
感谢 Ian Lance Taylor,我得以解决这个问题:
https://groups.google.com/forum/#!topic/golang-nuts/ndh-1wdsWYs
所以4096个字符是我的系统通过N_TTY_BUF_SIZE内核参数的限制。同样的事情也适用于 cat 和 Python。
无论如何,在 hackerrank.com 我能够在 Python 解决相同的练习,所以我猜他们对 Go 的配置有误,我已经让他们找出来了。
我想阅读来自 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 共享的 link,得到以下信息:我的输入只有一行包含 space 分隔的整数。当我将 spaces 更改为换行符时,它起作用了。但是由于hackerrate上的练习格式使用长space分隔的行,所以问题仍然存在,并进行了细化。
感谢 Ian Lance Taylor,我得以解决这个问题: https://groups.google.com/forum/#!topic/golang-nuts/ndh-1wdsWYs
所以4096个字符是我的系统通过N_TTY_BUF_SIZE内核参数的限制。同样的事情也适用于 cat 和 Python。
无论如何,在 hackerrank.com 我能够在 Python 解决相同的练习,所以我猜他们对 Go 的配置有误,我已经让他们找出来了。