Go语言遍历目录的三种方法举例

 更新时间:2023年11月22日 11:21:09   作者:Commas.KM  
学习io之后,尤其是文件操作,我们就可以遍历给定的目录了,这篇文章主要给大家介绍了关于Go语言遍历目录的三种方法,分别是ioutil.ReadDir、filepath.Walk以及filepath.Glob,需要的朋友可以参考下

一、写在前面

中文名英文名说明
目录directory一系列文件和文件夹的集合
文件夹folder用来存放文件和文件夹的容器
文件file用来存储信息的单个数据单元(文本、图像、声音等等)
路径path用于定位文件的路径

我们用命令行 tree /? 和 tree /F 来查询树形目录,如下所示:

D:\Go_WorkSpace\p3-traversal>tree /?
以图形显示驱动器或路径的文件夹结构。

TREE [drive:][path] [/F] [/A]

   /F   显示每个文件夹中文件的名称。
   /A   使用 ASCII 字符,而不使用扩展字符。

D:\Go_WorkSpace\p3-traversal>tree /F
文件夹 PATH 列表
卷序列号为 277B-1704
D:.
│  go.mod
│  main_filepath_glob.go
│  main_filepath_walk.go
│  main_ioutil_ReadDir.go

└─父目录
    │  1.txt
    │
    └─子目录
        │  21.txt
        │  22.txt
        │  23.txt
        │
        └─孙目录
                31.txt
                32.txt

二、使用 ioutil.ReadDir

  • 此方法读取目录的内容,并返回目录中每个文件或目录的 fs.FileInfo 对象切片;
  • 可以使用 for 循环遍历切片并打印出每个文件或目录的名称;

示例如下:

package main

import (
    "fmt"
    "io/ioutil"
    "log"
)

func main() {
    files, err := ioutil.ReadDir(".")
    if err != nil {
        log.Fatal(err)
    }
    for _, file := range files {
        fmt.Println(file.Name())
    }
}

结果输出:

D:\Go_WorkSpace\p3-traversal>go run main_ioutil_ReadDir.go
go.mod
main_filepath_glob.go
main_filepath_walk.go
main_ioutil_ReadDir.go
父目录

分析说明:

1、仅打印当前目录,不含子孙目录;
2、不会打印出...等特殊的目录;

三、使用 filepath.Walk

  • 此方法遍历根位于指定目录的文件树(a file tree),并为遇到的每个文件或目录调用函数;
  • 可以使用匿名函数(an anonymous function)打印出每个文件或目录的名称
    示例如下:
package main

import (
    "fmt"
    "os"
    "path/filepath"
)

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

结果输出:

D:\Go_WorkSpace\p3-traversal>go run main_filepath_walk.go
.
go.mod
main_filepath_glob.go
main_filepath_walk.go
main_ioutil_ReadDir.go
父目录
父目录\1.txt
父目录\子目录
父目录\子目录\21.txt
父目录\子目录\22.txt
父目录\子目录\23.txt
父目录\子目录\孙目录
父目录\子目录\孙目录\31.txt
父目录\子目录\孙目录\32.txt

分析说明:

1、打印当前目录,含子孙目录;
2、包含.等特殊的目录,遍历时需要排除;

四、使用 filepath.Glob

  • 此方法返回与指定模式匹配的文件名列表;
  • 可以使用通配符(*)来匹配当前目录中的所有文件

示例如下:

package main

import (
    "fmt"
    "log"
    "os"
    "path/filepath"
)

func main() {
    pwd, _ := os.Getwd()
    filePaths, err := filepath.Glob(filepath.Join(pwd, "*"))
    if err != nil {
        log.Fatal(err)
    }
    for _, filePath := range filePaths {
        fmt.Println(filePath)
    }
}

结果输出:

D:\Go_WorkSpace\p3-traversal>go run main_filepath_glob.go
D:\Go_WorkSpace\p3-traversal\go.mod
D:\Go_WorkSpace\p3-traversal\main_filepath_glob.go
D:\Go_WorkSpace\p3-traversal\main_filepath_walk.go
D:\Go_WorkSpace\p3-traversal\main_ioutil_ReadDir.go
D:\Go_WorkSpace\p3-traversal\父目录

分析说明:

1、仅打印当前目录,不含子孙目录;
2、不会打印出...等特殊的目录;
3、返回的是绝对路径

总结 

到此这篇关于Go语言遍历目录的三种方法的文章就介绍到这了,更多相关Go遍历目录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你熟悉Go语言中函数的使用

    一文带你熟悉Go语言中函数的使用

    这篇文章主要和大家分享一下Go语言中的函数的使用,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的小伙伴可以参考一下
    2022-11-11
  • 通过Golang编写一个AES加密解密工具

    通过Golang编写一个AES加密解密工具

    这篇文章主要为大家详细介绍了如何利用Golang制作一个AES加密解密工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-05-05
  • golang协程池模拟实现群发邮件功能

    golang协程池模拟实现群发邮件功能

    这篇文章主要介绍了golang协程池模拟实现群发邮件功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • golang jsoniter extension 处理动态字段的实现方法

    golang jsoniter extension 处理动态字段的实现方法

    这篇文章主要介绍了golang jsoniter extension 处理动态字段的实现方法,我们使用实例级别的 extension, 而非全局,可以针对不同业务逻辑有所区分,jsoniter 包提供了比较完善的定制能力,通过例子可以感受一下扩展性,需要的朋友可以参考下
    2023-04-04
  • Mac GoLand打不开(闪退)也不报错的解决方案

    Mac GoLand打不开(闪退)也不报错的解决方案

    这篇文章主要介绍了Mac GoLand打不开(闪退)也不报错的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言流程控制语句

    Go语言流程控制语句

    这篇文章介绍了Go语言流程控制语句的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Golang接口的定义与空接口及断言的使用示例

    Golang接口的定义与空接口及断言的使用示例

    在 Golang 中,接口是一种类型,它是由一组方法签名组成的抽象集合。这篇文章主要为大家介绍了Golang接口的具体使用,希望对大家有所帮助,空接口是特殊形式的接口类型,普通的接口都有方法,而空接口没有定义任何方法口,也因此,我们可以说所有类型都至少实现了空接口
    2023-04-04
  • 关于go平滑重启库overseer实现原理详解

    关于go平滑重启库overseer实现原理详解

    这篇文章主要为大家详细介绍了关于go平滑重启库overseer实现原理,文中的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴可以参考下
    2023-11-11
  • 浅析golang开发Error的使用详解

    浅析golang开发Error的使用详解

    Error是Go语言开发中最基础也是最重要的部分,很多朋友不明白goland error的一些基本使用方法,今天通过本文给大家详细介绍下,需要的朋友参考下吧
    2021-07-07
  • go语言实现十大常见的排序算法示例

    go语言实现十大常见的排序算法示例

    这篇文章主要为大家介绍了go语言实现十大常见的排序算法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论