博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 多线程查找文件内容
阅读量:4986 次
发布时间:2019-06-12

本文共 1746 字,大约阅读时间需要 5 分钟。

1 package main 2  3 import ( 4     "fmt" 5     "io/ioutil" 6     "os" 7     "path/filepath" 8     "strings" 9 )10 11 var matchCount = 012 var ch = make(chan int, 512)13 14 func findFile(path string, text string) {15     var pathArray [100]string16     var count = 017     filepath.Walk(path, func(path string, info os.FileInfo, err error) error {18         if err != nil {19         }20         //find text21         if !info.IsDir() {22             if info.Size() < 1024*1024 {23                 pathArray[count] = path24                 count++25                 if count >= 100 {26                     count = 027                     go findText(pathArray[0:100], text)28                     <-ch29                 }30             }31         }32         return nil33     })34     go findText(pathArray[0:count], text)35     <-ch36 37     fmt.Printf("一共发现了 %d 个匹配的文件", matchCount)38 39 }40 41 func findText(paths []string, text string) {42     for _, path := range paths {43         fi, err := os.Open(path)44         if err != nil {45             panic(err)46         }47         defer fi.Close()48         fd, err := ioutil.ReadAll(fi)49         if err != nil {50             panic(err)51         }52 53         if strings.Index(string(fd), text) > -1 {54             matchCount++55             fmt.Println(path)56         }57     }58     ch <- 159 }60 61 func main() {62     args := os.Args63     if len(args) < 3 {64         fmt.Println("需要两个参数 path text")65         return66     }67     path := args[1]68     text := args[2]69 70     _, err := os.Stat(path)71 72     if err != nil {73         fmt.Println("path不存在")74     } else {75         findFile(path, text)76     }77 }

 计数器增加的时候应该加锁

转载于:https://www.cnblogs.com/modprobe/p/4302686.html

你可能感兴趣的文章
Shell编程(二)Bash中调用Python
查看>>
主动与被动监控 拓扑图组合图 自定义监控
查看>>
SQL总结(一)基本查询
查看>>
PDF分割--可脱离python环境执行,可传参数,可弹窗的PC端小工具
查看>>
cas-client-core单点登录排除不需要拦截的URL
查看>>
OCR技术浅探 : 文字定位和文本切割(2)
查看>>
jmeter集合点
查看>>
Java类代码块执行顺序
查看>>
克鲁斯卡尔(模板题)
查看>>
汉字转拼音
查看>>
Python中Web框架编写学习心得
查看>>
dataTable/dataSet转换成Json格式
查看>>
asp.net core模块学习
查看>>
MySQL远程连接不上的解决方法
查看>>
如何使用JMeter从文件中提取数据
查看>>
AndroidBase基础类文档
查看>>
使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器
查看>>
三大特征 封装 继承 多态
查看>>
Python 3 函数分类
查看>>
通过.frm表结构和.ibd文件恢复数据
查看>>