golang 实现并发计算文件数量
package main import (
"fmt"
"io/ioutil"
"os"
) func listDir(path string, ch chan int) {
fmt.Println("waiting ..... read path:" + path)
files, _ := ioutil.ReadDir(path)
FileSlice := []string{}
DirSlice := []string{}
for _, fi := range files {
if fi.IsDir() {
//listDir(path + "/" + fi.Name())
DirSlice = append(DirSlice, path+"/"+fi.Name())
//fmt.Println("dir:" + path + "/" + fi.Name())
} else {
FileSlice = append(FileSlice, path+"/"+fi.Name()) }
} //return slice
var count int
count = 0
//var FindFiles string
for _, value := range FileSlice {
fmt.Println("file:" + value)
//FindFiles += value + ";"
count++
} //find sub directory by go pattern
DirCount := len(DirSlice)
fmt.Println("dir len:", DirCount)
if DirCount > 0 {
DirCH := make([]chan int, DirCount)
i := 0
for _, value := range DirSlice {
fmt.Println("dir:" + value)
DirCH[i] = make(chan int)
go listDir(value, DirCH[i])
i++
} fmt.Println("wait routine return")
for _, chs := range DirCH {
returnCount := <-chs
fmt.Println("return count=", returnCount)
count += returnCount
// ReturnFiles := <-chs
// if len(ReturnFiles) > 0 {
// FindFiles += ReturnFiles + ";"
// fmt.Println("list dir chan<-" + ReturnFiles)
// }
} }
//return results
fmt.Println("count=", count)
ch <- count //FindFiles
} func main() {
if len(os.Args) < 2 {
fmt.Println("please input param of path.")
return
}
fmt.Println(os.Args[1]) path := os.Args[1] //"C:/Users/Administrator/Desktop/publish/test"
//path := "c:/QQSave"
ch := make(chan int)
go listDir(path, ch)
fmt.Println("chan<-", <-ch)
}
golang 实现并发计算文件数量的更多相关文章
- [转帖] Linux下面计算文件数量的方法
Linux命令-查看目录下文件个数 2018年07月04日 10:37:07 sand_clock 阅读数 2002 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- Nginx优化_访问并发量(进程可以打开的最大文件数量)
如果客户端访问服务器提示“Too many open files”如何解决? [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.1.100/ # ...
- GO语言的进阶之路-Golang字符串处理以及文件操作
GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...
- golang的并发不等于并行
先 看下面一道面试题: func main() { runtime.GOMAXPROCS(1) wg := sync.WaitGroup{} wg.Add(20) for i := 0; i < ...
- windows下计算文件的md和sha值
在windows下可以使用FCIV命令行工具计算文件的md5和sha值,具体例子如下: FCIV -md5 -sha1 path\filename.ext 例如: FCIV-md5-sha1 c:\w ...
- Linux命令之查看文件夹、文件数量及其所占磁盘空间
一.查看数量 # 查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep "^-"| wc -l # 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表 ...
- Golang之并发篇
进程和线程 A.进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位. B.线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. C.一 ...
- golang中并发sync和channel
golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"go",但是如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel ...
- [C++] 二叉树计算文件单词数
目录 前置技能 构造和遍历二叉树 文件的打开.读取和写入 需求描述 读取文件 构建二叉树 格式化输入输出 具体实现 main.cpp binarytree.h binarytree.cpp 使用二叉树 ...
随机推荐
- Jquery学习笔记(9)--注册验证复习(未用到ajax)
纯复习,在$(this).val()这里浪费了时间,val()只适合input里面的value值,如果是span等标签里包裹的文本要用text()!! <!DOCTYPE html> &l ...
- ant.xml
<?xml version="1.0"?> <project name="dxcc" default="buildplugins&q ...
- iOS开发中的内存管理
一.为什么要进行内存管理 系统资源有限,iOS会为每一个执行的程序分配30M的内存,超过20M会收到内存警告,超过30M将会终止应用程序.因此,要及时回收一些不须要再继续使用的内存空间,比方回收一些不 ...
- PHP——做服务
xml的写法和特点 <?xml version='1.0' encoding='utf-8'?><Info><code>c001</code><n ...
- HDU 3294 Manacher模版题
点击打开链接 题意:求最长回文子串所在的区间,然后第一个字符代表a,以后的顺推,最后输出这个区间顺推后的串 思路:Manacher轻松水过.记录下最长回文串的位置和长度即可了,然后输出时自己处理一下, ...
- 禁用LinkButton的方法
1.服务器端,使用Enabled属性即可 <asp:LinkButton ID="lbtn" runat="server" Enabled="f ...
- BestCoder Round #81 (div.2) 1004 String(动态规划)
题目链接:BestCoder Round #81 (div.2) 1003 String 题意 中文题,上有链接.就不贴了. 思路 枚举起点i,计算能够达到k个不同字母的最小下标j,则此时有子串len ...
- linux 知识点拾遗
文件名称 在 Linux 底下,每个档案或文件夹的文件名称最长能够到达 255 的字符,加上完整路径时,最长可达 4096 个字符; 因为 Linux 在文字接口下的一些指令操作关系,一般来说,您在设 ...
- chrome vim设置
chrome vi 插件:Vrome 配置文件如下 set hintkeys=asdfghjkl;" 把默认使用数字来完成提示改为使用键盘上的这几个键map j 10jmap k 10k&q ...
- @classmethod装饰器
当一个类中有多条用例,我们在执行的时候每执行一条用例就要重新打开一次浏览器操作,例如下: start test1 quit start test2 start 若我们使用@classmethod装饰器 ...