我想用goroutines读取文本文件。从文件中读取的文本顺序无关紧要。如何读取并发文件?
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
例如,如果文本文件包含I like Go
,我想阅读此文件而不涉及订单。可能是[]string{"Go", "like", "I"}
答案 0 :(得分:3)
首先,如果您正在从io.Reader读取,请将其视为从流中读取。它是单输入源,你无法“并行读取”因为它的本质 - 在引擎盖下,你得到字节,等待另一个,再得到一个等等。稍后在缓冲区中对它进行标记。
其次,我希望你不要试图在一个'让我们添加gouroutines中使用goroutines作为'银弹'而且一切都会加速'。如果Go为您提供了一种使用并发的简单方法,那并不意味着您应该在任何地方使用它。
最后,如果你真的需要将大文件并行拆分成单词并且你认为分裂部分将成为瓶颈(不知道你的情况,但我真的怀疑) - 那么你必须发明自己的算法并使用'os'包到Seek()/ Read()文件的各个部分,每个部分由它自己的gouroutine处理,并以某种方式跟踪哪些部分已被处理。