我有一个文件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工作原理或文件的一般工作原理有一些误解,但我无法追踪错误的实际来源。
杨__羊羊
相关分类