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 实现并发计算文件数量的更多相关文章

  1. [转帖] Linux下面计算文件数量的方法

    Linux命令-查看目录下文件个数 2018年07月04日 10:37:07 sand_clock 阅读数 2002    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  2. Nginx优化_访问并发量(进程可以打开的最大文件数量)

    如果客户端访问服务器提示“Too many open files”如何解决? [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.1.100/    # ...

  3. GO语言的进阶之路-Golang字符串处理以及文件操作

    GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...

  4. golang的并发不等于并行

    先 看下面一道面试题: func main() { runtime.GOMAXPROCS(1) wg := sync.WaitGroup{} wg.Add(20) for i := 0; i < ...

  5. windows下计算文件的md和sha值

    在windows下可以使用FCIV命令行工具计算文件的md5和sha值,具体例子如下: FCIV -md5 -sha1 path\filename.ext 例如: FCIV-md5-sha1 c:\w ...

  6. Linux命令之查看文件夹、文件数量及其所占磁盘空间

    一.查看数量 # 查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep "^-"| wc -l # 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表 ...

  7. Golang之并发篇

    进程和线程 A.进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位. B.线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. C.一 ...

  8. golang中并发sync和channel

    golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"go",但是如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel ...

  9. [C++] 二叉树计算文件单词数

    目录 前置技能 构造和遍历二叉树 文件的打开.读取和写入 需求描述 读取文件 构建二叉树 格式化输入输出 具体实现 main.cpp binarytree.h binarytree.cpp 使用二叉树 ...

随机推荐

  1. Flask系列:数据库

    这个系列是学习<Flask Web开发:基于Python的Web应用开发实战>的部分笔记 对于用户提交的信息,包括 账号.文章 等,需要能够将这些数据保存下来 持久存储的三种方法: 文件: ...

  2. HTML5坦克大战(1)绘制坦克

    坦克尺寸如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...

  3. 1. DataBinding - offical tutorial

    1. DataBinding - offical tutorial android DataBinding tutorial 构建环境 数据与布局文件的绑定 data binding 表达式 数据对象 ...

  4. cocos2dx触摸

    两种方法其实都一样,CCLayer也是继承CCTouchDelegate. 1.继承CCTouchDelegate 添加触摸代理 CCTouchDispatcher* pDispatcher = CC ...

  5. 机器学习算法( 五、Logistic回归算法)

    一.概述 这会是激动人心的一章,因为我们将首次接触到最优化算法.仔细想想就会发现,其实我们日常生活中遇到过很多最优化问题,比如如何在最短时间内从A点到达B点?如何投入最少工作量却获得最大的效益?如何设 ...

  6. PHP——smarty模板(做登录页面和主页面)

    denglu.php <?php include "init.inc.php"; $smarty->assign("action","ma ...

  7. 用C/C++扩展你的PHP 为你的php增加功能

    英文版下载: PHP 5 Power Programming http://www.jb51.net/books/61020.html PHP取得成功的一个主要原因之一是她拥有大量的可用扩展.web开 ...

  8. jsp页面定义的map

    <script type="text/javascript">function Map(){ this.elements = new Array(); //删除MAP所 ...

  9. 用CSS调整scrollbar(滚动条)的配色

    可以通过调整CSS的方式,来给滚动条换色. 代码如下: .uicss-cn{ height:580px;overflow-y: scroll; scrollbar-face-color:#EAEAEA ...

  10. JavaScript修改IE注册表

    http://www.cnblogs.com/zmc/p/3373812.html <script type="text/javascript"> var obj = ...