GO语言按照深度遍历文件

sylar_d ·
不用递归就用广度搜索算法,就是利用列队遍历来代替递归。 代码如下: var QueueEOF = errors.New("queue is emtity") //用数组实现的简单列队 type stringQueue struct { next int data []string } func newStrQueue() *stringQueue { return &stringQueue{data: make([]string, 0, 1024)} } func (que *stringQueue) add(el string) { que.data = append(que.data, el) } func (que *stringQueue) pop() (string, error) { if que.next >= len(que.data) { return "", QueueEOF } nextStr := que.data[que.next] que.next++ return nextStr, nil } //广度搜索算法 func bfsFile(folder string) { var ( path string err error files []os.FileInfo ) //目录遍历队列 que := newStrQueue() //根目录入队 que.add(folder) //循环到列队不再有元素 for { if path, err = que.pop(); err != nil { break } if files, err = ioutil.ReadDir(path); err != nil { break } for _, f := range files { if f.IsDir() { //子目录入队 que.add(path + "/" + f.Name()) } else { //处理文件 //fmt.Println(path + "/" + f.Name()) } } } }
#2
更多评论
刚看了源码,filepath.Walk内部的实现还是用的递归,没有区别吧?
#1