全网整合营销服务商

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

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

如何使用Golang io/ioutil操作文件和目录_读取、写入和遍历示例

Go 1.16+ 已弃用 io/ioutil,推荐用 os.ReadFile/WriteFile、os.ReadDir 和 fs.WalkDir 替代;小文件读写可用 os 包简化操作,大文件应使用流式处理避免内存暴涨。

注意:io/ioutil 在 Go 1.16+ 已被弃用,推荐直接使用 io、os 和 path/filepath 包替代。 但为兼容旧项目或理解原理,下面仍以 io/ioutil(Go ≤ 1.15)的用法说明,并同步给出现代等效写法。

读取文件内容(小文件适用)

使用 ioutil.ReadFile 一次性读取整个文件到内存,适合配置文件、JSON、文本等小体积内容。

示例:

data, err := ioutil.ReadFile("config.json")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(data))

✅ 现代写法(Go 1.16+):

data, err := os.ReadFile("config.json") // 功能完全一致,更轻量

写入文件(覆盖或创建)

ioutil.WriteFile 自动处理文件打开、写入、关闭和权限设置,简洁安全。

示例(写入 UTF-8 文本):

err := ioutil.WriteFile("hello.txt", []byte("Hello, Golang!"), 0644)
if err != nil {
    log.Fatal(err)
}

✅ 现代写法:

err := os.WriteFile("hello.txt", []byte("Hello, Golang!"), 0644)

⚠️ 注意:0644 是 Unix 权限(所有者可读写,组和其他用户只读),Windows 上仅影响只读标志。

读取目录内容(非递归)

ioutil.ReadDir 返回按文件名排序的 os.FileInfo 切片,适合列出当前目录下的文件/子目录。

示例:

files, err := ioutil.ReadDir(".")
if err != nil {
    log.Fatal(err)
}
for _, f := range files {
    fmt.Printf("%s\t%v\n", f.Name(), f.IsDir())
}

✅ 现代写法:

files, err := os.ReadDir(".") // 返回 fs.DirEntry,更轻量、不预加载 FileInfo
// 若需完整信息,调用 f.Info();若只需名字和是否为目录,用 f.IsDir() 即可

递归遍历目录(查找所有 .go 文件)

ioutil 本身不提供递归遍历,需配合 filepath.Walk 使用(该函数未被弃用,仍在 path/filepath 中)。

示例:

err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
    if err != nil {
        return err
    }
    if !info.IsDir() && strings.HasSuffix(info.Name(), ".go") {
        fmt.Println(path)
    }
    return nil
})
if err != nil {
    log.Fatal(err)
}

✅ Go 1.16+ 推荐搭配 fs.WalkDir(更高效,支持跳过子树):

err := fs.WalkDir(os.DirFS("."), ".", func(path string, d fs.DirEntry, err error) error {
    if err != nil {
        return err
    }
    if !d.IsDir() && strings.HasSuffix(d.Name(), ".go") {
        fmt.Println(path)
    }
    return nil
})

不复杂但容易忽略:所有 ioutil 函数都隐式处理错误和资源释放,看似方便,但大文件读写易导致内存暴涨;生产环境建议流式处理(io.Copy + os.Open/os.Create),并显式 Close


# js  # json  # go  # windows  # golang  # unix  # win  # 配置文件  # 递归  # 切片  # copy  # 遍历  # 子树  # 流式  # 大文件  # 已被  # 只需  # 跳过  # 未被 


相关文章: 如何用已有域名快速搭建网站?  如何使用Golang安装API文档生成工具_快速生成接口文档  Bpmn 2.0的XML文件怎么画流程图  建站之星如何助力网站排名飙升?揭秘高效技巧  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  高端网站建设与定制开发一站式解决方案 中企动力  常州企业建站如何选择最佳模板?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  公司网站制作价格怎么算,公司办个官网需要多少钱?  免费视频制作网站,更新又快又好的免费电影网站?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  广德云建站网站建设方案与建站流程优化指南  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  建站之星如何实现五合一智能建站与营销推广?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  如何注册花生壳免费域名并搭建个人网站?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  网站设计制作企业有哪些,抖音官网主页怎么设置?  制作营销网站公司,淘特是干什么用的?  如何快速生成高效建站系统源代码?  想学网站制作怎么学,建立一个网站要花费多少?  如何用美橙互联一键搭建多站合一网站?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  linux top下的 minerd 木马清除方法  如何在Windows虚拟主机上快速搭建网站?  如何用IIS7快速搭建并优化网站站点?  黑客如何通过漏洞一步步攻陷网站服务器?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Java解压缩zip - 解压缩多个文件或文件夹实例  ,在苏州找工作,上哪个网站比较好?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  购物网站制作公司有哪些,哪个购物网站比较好?  家具网站制作软件,家具厂怎么跑业务?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何选择适配移动端的WAP自助建站平台?  北京专业网站制作设计师招聘,北京白云观官方网站?  如何快速选择适合个人网站的云服务器配置?  网站代码制作软件有哪些,如何生成自己网站的代码?  如何配置支付宝与微信支付功能?  如何通过万网虚拟主机快速搭建网站?  php json中文编码为null的解决办法  如何用低价快速搭建高质量网站?  网站网页制作专业公司,怎样制作自己的网页? 

您的项目需求

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