全网整合营销服务商

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

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

如何在Golang中使用ioutil.ReadDir列出文件_Golang ReadDir文件列表与操作实践

ioutil.ReadDir是Go中读取目录内容的便捷函数,返回按文件名排序的fs.FileInfo切片,适用于旧项目维护;但自Go 1.16起已被os.ReadDir取代,后者性能更高、支持懒加载。

在Golang中,ioutil.ReadDir 是一个便捷函数,用于读取目录中的文件和子目录列表。虽然从 Go 1.16 开始官方建议使用 os.ReadDir 替代 ioutil.ReadDir,但了解其用法仍有实践价值,尤其在维护旧项目时。

使用 ioutil.ReadDir 列出文件

ioutil.ReadDir 返回一个按文件名排序的 fs.FileInfo 切片,每个元素代表目录中的一个条目。

基本用法如下:

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    dir := "./" // 指定要读取的目录
    files, err := ioutil.ReadDir(dir)
    if err != nil {
        fmt.Println("读取目录失败:", err)
        return
    }

    for _, file := range files {
        if file.IsDir() {
            fmt.Printf("[目录]  %s\n", file.Name())
        } else {
            fmt.Printf("[文件]  %s (%d bytes)\n", file.Name(), file.Size())
        }
    }
}

这段代码会列出当前目录下所有条目,并区分文件和目录,同时显示文件大小。

筛选特定类型文件

实际开发中,常需过滤出特定扩展名的文件,比如只列出 .txt 文件。

可以通过检查文件名后缀实现:

for _, file := range files {
    if !file.IsDir() && strings.HasSuffix(file.Name(), ".txt") {
        fmt.Println("文本文件:", file.Name())
    }
}

别忘了导strings 包。这种模式适用于日志处理、配置加载等场景。

递归遍历子目录(注意 ioutil.ReadDir 不支持)

ioutil.ReadDir 只读取单层目录,不包含递归功能。若需遍历子目录,可结合递归函数手动实现。

示例:递归打印所有文件

func walkDir(path string) {
    files, err := ioutil.ReadDir(path)
    if err != nil {
        fmt.Println("访问路径失败:", path, err)
        return
    }

    for _, file := range files {
        filepath := path + "/" + file.Name()
        if file.IsDir() {
            fmt.Println("[进入目录]", filepath)
            walkDir(filepath) // 递归调用
        } else {
            fmt.Println("[文件]", filepath)
        }
    }
}

该函数能深入每一级子目录,适合构建文件索引或批量处理任务。

推荐迁移到 os.ReadDir(Go 1.16+)

自 Go 1.16 起,ioutil.ReadDir 被标记为废弃,推荐使用 os.ReadDir,它返回 fs.DirEntry 类型,性能更高且更灵活。

等效写法:

entries, err := os.ReadDir("./")
if err != nil {
    log.Fatal(err)
}
for _, entry := range entries {
    info, _ := entry.Info()
    fmt.Printf("%s: %v bytes\n", entry.Name(), info.Size())
}

新 API 更轻量,因为 DirEntry 提供懒加载能力,仅在需要时才调用 Info() 获取完整信息。

基本上就这些。掌握 ioutil.ReadDir 的使用有助于理解 Go 的文件系统操作逻辑,但在新项目中应优先采用 os.ReadDir。两者思路一致,迁移成本低。关键是根据需求判断是否需要递归、过滤或获取元数据。不复杂但容易忽略细节,比如错误处理和路径分隔符兼容性。


# golang  # go  # 懒加载  # ai  # 递归函数  # 递归  # 切片  # 遍历  # 适用于  # 更高  # 加载  # 是一个  # 已被  # 目录中  # 但在  # 推荐使用 


相关文章: nginx修改上传文件大小限制的方法  建站之星2.7模板:企业网站建设与h5定制设计专题  如何快速登录WAP自助建站平台?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何在云服务器上快速搭建个人网站?  移民网站制作流程,怎么看加拿大移民官网?  建站之星如何保障用户数据免受黑客入侵?  内网网站制作软件,内网的网站如何发布到外网?  已有域名能否直接搭建网站?  建站之家VIP精选网站模板与SEO优化教程整合指南  公司门户网站制作流程,华为官网怎么做?  如何通过虚拟主机快速完成网站搭建?  建站之星代理费用多少?最新价格详情介绍  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  建站之星后台密码如何安全设置与找回?  如何在IIS服务器上快速部署高效网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  建站org新手必看:2024最新搭建流程与模板选择技巧  外贸公司网站制作,外贸网站建设一般有哪些步骤?  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何用VPS主机快速搭建个人网站?  孙琪峥织梦建站教程如何优化数据库安全?  手机网站制作与建设方案,手机网站如何建设?  如何通过.red域名打造高辨识度品牌网站?  如何在Windows 2008云服务器安全搭建网站?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  营销式网站制作方案,销售哪个网站招聘效果最好?  如何正确下载安装西数主机建站助手?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何在Golang中指定模块版本_使用go.mod控制版本号  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何制作算命网站,怎么注册算命网站?  如何制作网站标识牌,动态网站如何制作(教程)?  浅析上传头像示例及其注意事项  建站之星安装路径如何正确选择及配置?  南京网站制作费用,南京远驱官方网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  建站之星上传入口如何快速找到?  制作旅游网站html,怎样注册旅游网站?  太原网站制作公司有哪些,网约车营运证查询官网?  建站之星如何优化SEO以实现高效排名?  建站之星免费模板:自助建站系统与智能响应式一键生成  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  小型网站制作HTML,*游戏网站怎么搭建?  css网站制作参考文献有哪些,易聊怎么注册?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  IOS倒计时设置UIButton标题title的抖动问题 

您的项目需求

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