全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何用Golang实现文件夹遍历_Golang 文件夹遍历实践

使用filepath.Walk可高效递归遍历目录,结合os.FileInfo过滤文件类型并获取元数据,如跳过.git目录或仅处理.go文件,同时通过SkipDir提升性能。

在Go语言中实现文件夹遍历是一个常见需求,比如用于扫描日志目录、查找特定文件或统计项目代码行数。Golang提供了简洁而强大的标准库支持,主要通过 osfilepath 包来完成。

使用 filepath.Walk 遍历目录

Go中最常用的目录遍历方式是 filepath.Walk 函数。它会递归访问指定目录下的所有子目录和文件,并对每个条目执行传入的回调函数。

基本用法如下:

package main

import (
    "fmt"
    "log"
    "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 {
            log.Printf("无法访问 %s: %v", path, err)
            return nil // 返回nil继续遍历,返回err则中断
        }

        fmt.Println(path)
        return nil
    })

    if err != nil {
        log.Fatal(err)
    }
}

在这个例子中,Walk 会对每个文件和目录调用匿名函数。参数说明:

  • path:当前条目的完整路径
  • info:os.FileInfo 类型,包含文件名、大小、是否为目录等信息
  • err:访问该条目时可能出现的错误

过滤文件类型或跳过目录

实际应用中我们通常只关心某些类型的文件,或者想跳过特定目录(如 .git 或 node_modules)。

可以通过检查 info.IsDir() 和文件扩展名来实现:

err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
    if err != nil {
        return nil
    }

    // 跳过目录
    if info.IsDir() {
        dirName := info.Name()
        if dirName == ".git" || dirName == "node_modules" {
            return filepath.SkipDir // 跳过整个目录
        }
        return nil
    }

    // 只处理 .go 文件
    if filepath.Ext(path) == ".go" {
        fmt.Println("Go文件:", path)
    }

    return nil
})

获取文件详细信息

利用 os.FileInfo 可以获取更多元数据:

  • info.Name():文件名
  • info.Size():文件大小(字节)
  • info.ModTime():修改时间
  • info.Mode():权限模式
  • info.IsDir():是否为目录

例如打印所有 `.log` 文件的大小和修改时间:

if filepath.Ext(path) == ".log" {
    fmt.Printf("文件: %s | 大小: %d 字节 | 修改时间: %s\n",
        path, info.Size(), info.ModTime())
}

基本上就这些。filepath.Walk 简洁高效,适合绝大多数场景。注意处理权限不足或路径不存在的情况,避免程序崩溃。合理使用 SkipDir 能显著提升性能,特别是在大型项目中跳过不必要的依赖目录。


# golang  # git  # node  # go  # go语言  # 字节  # 回调函数  # ai  # 标准库  # 递归 


相关文章: 齐河建站公司:营销型网站建设与SEO优化双核驱动策略  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何在建站主机中优化服务器配置?  已有域名如何快速搭建专属网站?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  linux top下的 minerd 木马清除方法  ,石家庄四十八中学官网?  如何快速上传建站程序避免常见错误?  如何在宝塔面板创建新站点?  个人网站制作流程图片大全,个人网站如何注销?  建站之星官网登录失败?如何快速解决?  如何配置支付宝与微信支付功能?  如何通过万网虚拟主机快速搭建网站?  PHP正则匹配日期和时间(时间戳转换)的实例代码  打鱼网站制作软件,波克捕鱼官方号怎么注册?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何制作算命网站,怎么注册算命网站?  如何在云主机快速搭建网站站点?  网站制作报价单模板图片,小松挖机官方网站报价?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  制作网站外包平台,自动化接单网站有哪些?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何快速搭建个人网站并优化SEO?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  建站主机是什么?如何选择适合的建站主机?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  制作宣传网站的软件,小红书可以宣传网站吗?  清除minerd进程的简单方法  东莞专业制作网站的公司,东莞大学生网的网址是什么?  建站之星如何助力企业快速打造五合一网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  做企业网站制作流程,企业网站制作基本流程有哪些?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  C#怎么使用委托和事件 C# delegate与event编程方法  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  如何选择适配移动端的WAP自助建站平台?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  定制建站如何定义?其核心优势是什么?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  制作旅游网站html,怎样注册旅游网站?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。