Go语言实战案例-遍历目录下所有文件

在《Go语言100个实战案例》中的 文件与IO操作篇 - 案例18:遍历目录下所有文件 的完整内容,帮助你掌握如何用 Go 遍历整个文件目录树,包括子目录中的所有文件。

🎯 案例目标

使用 Go 语言遍历指定目录,递归地列出该目录及其所有子目录下的所有文件路径。


🧩 应用场景

  • • 文件备份、文件管理工具开发
  • • 查找某种类型的文件(如 .jpg, .txt
  • • 批量处理目录下文件,如格式转换或分析

🧠 涉及知识点

  • • 使用 filepath.WalkDir() 遍历目录结构
  • • 判断文件类型(文件或文件夹)
  • • 获取文件相对/绝对路径
  • • 错误处理

💻 示例代码:递归遍历目录下所有文件

go 复制代码
package main

import (
    "fmt"
    "io/fs"
    "path/filepath"
)

func main() {
    root := "./testfiles" // 要遍历的目录

    err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
        if err != nil {
            fmt.Println("访问出错:", err)
            return err
        }

        // 判断是否为文件
        if !d.IsDir() {
            fmt.Println("文件:", path)
        }

        return nil
    })

    if err != nil {
        fmt.Println("遍历失败:", err)
    }
}

🖼️ 示例目录结构

css 复制代码
testfiles/
├── a.txt
├── b.jpg
├── docs/
│   ├── c.pdf
│   └── d.docx

📤 执行输出示例

bash 复制代码
文件: testfiles/a.txt
文件: testfiles/b.jpg
文件: testfiles/docs/c.pdf
文件: testfiles/docs/d.docx

🛠 技术说明

函数 作用
filepath.WalkDir() 遍历目录树
fs.DirEntry 提供文件信息结构
d.IsDir() 判断是否是文件夹
path 每个文件或文件夹的完整路径

🔄 拓展示例:只打印特定类型文件

lua 复制代码
if !d.IsDir() && filepath.Ext(path) == ".txt" {
    fmt.Println("TXT 文件:", path)
}

🧪 拓展练习

  • • 获取每个文件的大小并打印
  • • 将结果写入日志文件
  • • 忽略特定文件夹(如 .git/
  • • 改为使用 os.ReadDir + 递归方式实现

✅ 小结

本案例帮助你学会了如何在 Go 中递归遍历整个文件目录结构。filepath.WalkDir 是处理目录树的利器,适用于各种需要深入访问文件系统的实际开发任务。

相关推荐
WZTTMoon9 分钟前
Spring Boot 启动全解析:4 大关键动作 + 底层逻辑
java·spring boot·后端
小二·1 小时前
Spring框架入门:深入理解Spring DI的注入方式
java·后端·spring
毕设源码-钟学长1 小时前
【开题答辩全过程】以 基于springboot和协同过滤算法的线上点餐系统为例,包含答辩的问题和答案
java·spring boot·后端
计算机毕设小月哥2 小时前
【Hadoop+Spark+python毕设】中风患者数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop
后端·python·mysql
q***44152 小时前
Spring Security 新版本配置
java·后端·spring
计算机毕设匠心工作室2 小时前
【python大数据毕设实战】强迫症特征与影响因素数据分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
o***74172 小时前
Springboot中SLF4J详解
java·spring boot·后端
雨中散步撒哈拉2 小时前
18、做中学 | 初升高 | 考场一 | 面向过程-家庭收支记账软件
开发语言·后端·golang
韩立学长3 小时前
【开题答辩实录分享】以《智慧物业管理系统的设计与实现》为例进行答辩实录分享
java·后端·mysql
d***95623 小时前
springboot接入deepseek深度求索 java
java·spring boot·后端