Go语言并发模式与应用
1. 并发文件搜索
在处理常规文件(非目录)时,我们可以根据指定选项比较文件名或文件内容。以下是具体操作步骤:
1.检查文件名:如果未指定检查文件内容,直接比较文件名。若匹配则将结果发送到输出通道。
if o == nil || !o.Contents { if name == term { select { case <-ctx.Done(): default: ch <- Result{File: file} } } return }- 检查文件内容:若要搜索文件内容,需打开文件并逐行读取。
f, err := os.Open(file) if err != nil { select { case <-ctx.Done(): default: ch <- Result{File: file, Err: err} } return } defer f.Close() scanner, matches, line := bufio.NewScanner(f), []Match{}, 1 for scanner.Scan() { select { case <-ctx.Don