使用filepath.Walk可递归遍历目录,os.ReadDir用于非递归列出文件,结合file.Info判断类型,通过filepath.Ext过滤特定格式,返回filepath.SkipDir跳过指定子目录。

在Go语言中实现目录遍历,主要依赖标准库中的 os 和 path/filepath 包。最常用的方式是使用 filepath.Walk 函数,它可以递归遍历指定目录下的所有子目录和文件。
使用 filepath.Walk 遍历目录
filepath.Walk 接受一个起始路径和一个处理函数,对每个访问的文件或目录调用该函数。你可以在这个函数中判断是文件还是目录,并执行相应逻辑。
示例代码:
package mainimport ( "fmt" "os" "path/filepath")func main() { root := "/path/to/your/directory" // 替换为实际路径 err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { fmt.Printf("访问 %s 时出错: %vn", path, err) return nil // 返回 nil 继续遍历,返回 err 则停止 } if info.IsDir() { fmt.Printf("[DIR] %sn", path) } else { fmt.Printf("[FILE] %s (大小: %d bytes)n", path, info.Size()) } return nil }) if err != nil { fmt.Printf("遍历失败: %vn", err) }}
只遍历当前目录(非递归)
如果你只需要列出某个目录下的内容而不进入子目录,可以使用 os.ReadDir(推荐)或 os.Open + Readdir。
立即学习“go语言免费学习笔记(深入)”;
在Android
本文档主要讲述的是在Android-Studio中导入Vitamio框架;介绍了如何将Vitamio框架以Module的形式添加到自己的项目中使用,这个方法也适合导入其他模块实现步骤。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
0 查看详情
示例:使用 os.ReadDir
files, err := os.ReadDir("/path/to/dir")if err != nil { fmt.Printf("读取目录失败: %vn", err) return}for _, file := range files { if file.IsDir() { fmt.Printf("[DIR] %sn", file.Name()) } else { info, _ := file.Info() fmt.Printf("[FILE] %s (%d bytes)n", file.Name(), info.Size()) }}
过滤特定文件类型
你可以在遍历过程中加入条件判断,例如只处理 .txt 文件。
filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { return nil } if !info.IsDir() && filepath.Ext(path) == ".txt" { fmt.Printf("找到文本文件: %sn", path) } return nil})
跳过某些子目录
如果想跳过特定目录(如 node_modules),可以在回调中判断并返回 filepath.SkipDir。
filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { return nil } if info.IsDir() && info.Name() == "node_modules" { return filepath.SkipDir // 跳过该目录 } fmt.Println(path) return nil})
基本上就这些。根据需求选择递归或非递归方式,结合文件信息判断类型和属性,就能灵活实现目录遍历功能。
以上就是如何使用Golang实现目录遍历的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1128432.html
微信扫一扫
支付宝扫一扫