概述

调用 path/filepath 包即可。filepath.Walk() 办法十分弱小,无需递归,以非常简单的形式实现了整个目录遍历。

倡议先浏览 创立, 删除目录。

例子

package mainimport (    "fmt"    "io/fs"    "os"    "path/filepath")func main() {    dir := "/tmp/test_main_go_dir"        // 创立一些测试目录和文件    if _, err := os.Stat(dir); os.IsNotExist(err) {        subDir := filepath.Join(dir, "1", "2", "3")        err = os.MkdirAll(subDir, 0755) // 创立多级目录        if err != nil {            panic(err)        }        // 退出时删除目录        defer func() {            err = os.RemoveAll(dir)            if err != nil {                panic(err)            }        }()        // 在目录上面新建 2 个文件        _, err := os.Create(filepath.Join(subDir, "4.log"))        if err != nil {            panic(err)        }        _, err = os.Create(filepath.Join(subDir, "5.log"))        if err != nil {            panic(err)        }    }    err := filepath.Walk(dir, func(path string, info fs.FileInfo, err error) error {        var typ string        if info.IsDir() {            typ = "Dir"        } else {            typ = "File"        }        fmt.Printf("[%s] %s\n", typ, path)        return nil    })    if err != nil {        panic(err)    }}// $ go run main.go// 输入如下/**  [Dir] /tmp/test_main_go_dir  [Dir] /tmp/test_main_go_dir/1  [Dir] /tmp/test_main_go_dir/1/2  [Dir] /tmp/test_main_go_dir/1/2/3  [File] /tmp/test_main_go_dir/1/2/3/4.log  [File] /tmp/test_main_go_dir/1/2/3/5.log*/

分割我