使用path/filepath库的Walk函数可以很好的处理这个问题。
Walk函数原型
func Walk(root string, walkFn WalkFunc) error
walkFn是一个WalkFunc函数类型的参数,也就说第二个参数要传递函数进去,函数的原型如下。
WalkFunc原型
type WalkFunc func(path string, info os.FileInfo, err error) error
解释一下参数
path:表示文件的路径
info:表示文件的信息,同os.File.Stat()返回的对象一致
err:错误信息
下面演示一下,目录如下:
golang扫描目录结构
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
filepath.Walk("./",
func(path string, f os.FileInfo, err error) error {
if f == nil {
return err
}
if f.IsDir() {
fmt.Println("dir:", path)
return nil
}
fmt.Println("file:", path)
return nil
})
// output:
// dir: ./
// dir: 2016
// dir: 2016/04
// dir: 2016/04/11
// dir: 2016/04/12
// file: 2016/04/12/1.log
// file: recursion.go
}