【发布时间】:2019-10-20 19:14:24
【问题描述】:
我有一个文件abc.txt,其中包含打印两次的字母,用换行符分隔
abcdefghijklmopqrstuvwxyz
abcdefghijklmopqrstuvwxyz
我想创建一个可以同时解析行的解析器。例如,每行一个 goroutine。我目前尝试这样做的过程是:
- 创建一个通道来接收文本行
- 为每一行创建一个新的扫描仪
- 将该扫描仪和通道传递给 goroutine
- 主进程中的进程结果
但是,只有一个扫描器返回有用的输出。我正在尝试做的代码是这样的:
func main() {
file, err := os.Open("./strangeness/abc.txt")
if err != nil {
log.Panic(err)
}
defer file.Close()
inChan := make(chan string)
for i := 0; i < 2; i++ {
var scanner scanner.Scanner
file.Seek(27, 0)
scanner.Init(file)
go parseLine(fmt.Sprintf("Scanner %v:", i), &scanner, inChan)
}
for msg := range inChan {
fmt.Println(msg)
}
}
func parseLine(name string, scanner *scanner.Scanner, out chan string) {
for i := 0; i < 26; i++ {
out <- fmt.Sprintf("%s %c", name, scanner.Next())
}
}
我想我可能对 go text/scanner 的工作方式或文件的一般工作方式有一些误解,但我无法追踪错误的实际来源。
【问题讨论】:
标签: go concurrency