概述
调用 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*/