使用filepath.Walk

path/filepath 标准库的包提供了便捷的Walk方法,它能自动的扫描子目录,使用起来也很简单

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func main() {
    var files []string

    root := "/some/folder/to/scan"
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        files = append(files, path)
        return nil
    })
    if err != nil {
        panic(err)
    }
    for _, file := range files {
        fmt.Println(file)
    }
}

filepath.Walk 接受一个string指向根目录(root),和一个带有签名(signature)的函数类型WalkFunc

type WalkFunc func(path string, info os.FileInfo, err error) error

这个方法将会文件夹扫描的每一次遍历中被调用。
可以看到另一个变量info的类型是os.FileInfo,这个变量非常重要因为我们从当前的文件(文件夹或者是文件)获取很多有用的信息:文件名,文件大小,模式,更改时间

同时我们也可以避免去处理文件夹通过添