如何在Golang中遍历目录文件_使用ioutil ReadDir和filepath Walk


应根据需求层级选择:只需单层目录列表用os.ReadDir,需递归遍历整个目录树用filepath.WalkDir;旧版Go兼容可选filepath.Walk,但推荐升级迁移。

如何在golang中遍历目录文件_使用ioutil readdir和filepath walk

在 Go 语言中遍历目录有多种方式,ioutil.ReadDir(已弃用,现为 os.ReadDir)适合简单、单层目录读取;而 filepath.Walk(或更现代的 filepath.WalkDir)适用于递归遍历整个目录树。两者用途不同,选错会导致逻辑错误或性能问题。

用 os.ReadDir 遍历单层目录(推荐替代 ioutil.ReadDir)

ioutil.ReadDir 自 Go 1.16 起已被标记为废弃,应改用 os.ReadDir。它返回 []fs.DirEntry,轻量且不预加载文件信息,适合快速列出当前目录下的条目。

  • 只读取指定目录一层,不进入子目录
  • 返回的是 fs.DirEntry,调用 .Name() 获取文件名,.IsDir() 判断是否为目录
  • 如需详细信息(如大小、修改时间),需额外调用 .Info()(会触发一次系统调用)

示例:

entries, err := os.ReadDir("./data")
if err != nil {
    log.Fatal(err)
}
for _, entry := range entries {
    name := entry.Name()
    if entry.IsDir() {
        fmt.Printf("DIR: %s\n", name)
    } else {
        fmt.Printf("FILE: %s\n", name)
    }
}

用 filepath.WalkDir 递归遍历整个目录树(推荐)

filepath.WalkDir 是 Go 1.16 引入的替代 filepath.Walk 的函数,性能更好、更安全(避免重复 stat、支持跳过子目录等)。它按深度优先顺序访问每个文件/目录,并通过回调函数处理每个路径。

FlowMuse AI FlowMuse AI

节点式AI视觉创作引擎

FlowMuse AI 85 查看详情 FlowMuse AI
  • 自动递归进入子目录,适合搜索、打包、清理等场景
  • 回调函数签名:func(path string, d fs.DirEntry, err error) error
  • 若在回调中返回 filepath.SkipDir,将跳过当前目录及其所有子项
  • 遇到权限错误等可选择忽略或中断

示例:打印所有 .go 文件路径

err := filepath.WalkDir("./src", func(path string, d fs.DirEntry, err error) error {
    if err != nil {
        return err // 或 log.Printf("skip %s: %v", path, err)
    }
    if !d.IsDir() && strings.HasSuffix(d.Name(), ".go") {
        fmt.Println(path)
    }
    return nil
})
if err != nil {
    log.Fatal(err)
}

filepath.Walk 的注意事项(兼容旧版本时使用)

filepath.Walk 仍可用,但内部会对每个路径调用 os.Stat,开销略大;且无法跳过子目录(除非手动拼接路径并提前 return)。若项目需支持 Go

  • 回调函数参数是 path stringinfo os.FileInfo,无需再调用 Stat
  • 不能直接跳过子目录 —— 必须判断 info.IsDir() 后,对子目录路径手动处理
  • 错误处理较弱,例如权限拒绝可能导致整个遍历终止

如何选择?看需求层级

判断标准很简单:

  • 只要当前目录下的文件名列表 → 用 os.ReadDir
  • 要搜所有子目录里的配置文件、日志、源码 → 用 filepath.WalkDir
  • 维护老项目且不能升级 Go 版本 → 可用 filepath.Walk,但建议逐步迁移
  • 需要并发处理或高级过滤(如按大小、时间范围)→ 可基于 WalkDir 封装,或使用第三方库如 golang.org/x/tools/filetype

以上就是如何在Golang中遍历目录文件_使用ioutil ReadDir和filepath Walk的详细内容,更多请关注其它相关文章!


# 目录下  # 烟台营销推广多少钱  # seo抓包技术出售  # 有品推广的营销方案  # 百度seo公司报价  # 营销推广专业技能  # 中山百度网站推广公司  # 弋江区网站优化怎么做  # 哈尔滨直播seo  # 巢湖学院网站建设  # 镇江抖音营销推广难度  # 已被  # go  # 的是  # 布尔  # 如何在  # 跳过  # 回调  # 遍历  # 递归  # 配置文件  # 回调函数  # golang 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  《360浏览器》自动保存账号密码设置方法  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  以下哪一个是适应长期护理制度发展而设立的新职业  vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程  热血江湖归来医师加点攻略  批改网官网首页登录 批改网学生用户登录入口  《腾讯相册管家》注销账号方法  C++ optional用法详解_C++17处理可能为空的返回值  谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法  研招网官方网站正版登录网址_中国研究生招生信息网官网首页  在PySimpleGUI中实现键盘按键绑定按钮事件  如何配置VS Code作为您Git操作的默认编辑器  PHP多语言网站的实现:会话管理与翻译函数优化教程  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  《饿了么》拼好饭点外卖教程2025  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  《新三国志曹操传》游历事件袁尚突围攻略  盲鳗善于分泌黏液猜猜主要用来做什么  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  铁拳8在线玩 铁拳8在线秒玩入口  人教版电子教材在线获取指南  鲁班大师乓乓皮肤获取方法  苹果手机手电筒无法开启  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  《米姆米姆哈》米姆获取及技能攻略  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  微信客户端如何找回密码_微信客户端忘记密码找回方法  《杖剑传说》食谱大全  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  《百度畅听版》关闭兴趣推荐方法  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  《随手记》启用语音备注方法  免费占卜在线神算_免费占卜手机神算  网易云音乐闹钟铃声设置教程  vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读  PSD转AI文件的简单方法  如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?  PHP动态导航按钮:根据用户登录状态切换链接与文本  yandex网页版直接登录 yandex官方入口平台访问方法  sublime text 4如何安装_最新版sublime下载与汉化教程  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  mysql如何管理数据库账户_mysql数据库账户管理技巧  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel 

 2025-12-18

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.