日期:2023年3月1日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006
文章目录
- 一、写在前面
- 二、使用 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、返回的是绝对路径;
我的微信公众号【会飞的小猴子】,等你来关注哦 ^ - ^
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/129259840



















