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 使用二叉树 ...
随机推荐
- gcc 编译动态库和静态库
Linux C 编程入门之一:gcc 编译动态库和静态库 cheungmine 2012 参考: C程序编译过程浅析 http://blog.csdn.net/koudaidai/article/de ...
- nginx配置事例
#user nobody; worker_processes 4; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
- 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例
Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...
- Dynamics CRM 系统自己定义部分的语言翻译
Dynamics CRM 自带语言切换功能,在官网下载所需语言包安装后,在设置语言中就能看到你所加入的语言.勾选要启用的语言应用就可以.再打开系统设置--语言就能看到可更改用户界面语言的显示了. wa ...
- 图表 Chart
工作中,需要实现如下的图表,查阅了不少的资料,问了不少的人,下面对下图表的实现代码做下讲解. 实现代码: chart1.Series.Clear();//清空图表中的序列,图表中有默认的序列 //ch ...
- Unity3D必备知识: 物理学公式
一.质点的运动(1)——直线运动 1)匀变速直线运动 1.平均速度V=s/t(定义式) 2.有用推论Vt*Vt-Vo*Vo=2as 3.中间时刻速度Vt/2=V平=(Vt+Vo)/2 4.末速度Vt= ...
- python3----模块(序列化(json&pickle)+XML+requests)
一.序列化模块 Python中用于序列化的两个模块: json 跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle python内置的数据 ...
- phpstorm 内存设置
https://blog.csdn.net/qq_33862644/article/details/81938970
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
I Hate It Time Limit: 90 ...
- hdu 4055(经典问题)
总是不能正确的将一个大问题变成子问题,而且又找不到状态转移方程. 直接导致这题想了5个小时最后还是无果... 谨记! Number String Time Limit: 10000/5000 MS ( ...