Golang递归获取目录下所有文件方法实例
在Golang中要递归获取目录下所有文件,可以很方便地通过标准库中的filepath.Walk函数来实现,下面将详细讲解这个过程。
1. 使用filepath.Walk函数
filepath.Walk函数的定义如下:
func Walk(root string, walkFn WalkFunc) error
root是要遍历的根目录,walkFn是实现文件遍历逻辑的函数,主要用于遍历的目录中的每个文件或目录。
WalkFunc的定义如下:
type WalkFunc func(path string, info os.FileInfo, err error) error
WalkFunc返回一个错误值,如果返回nil,则Walk函数会继续遍历下一个文件或目录,否则Walk函数会中止遍历并返回错误值。参数path指的是遍历到的文件的路径,info包含遍历到文件的信息,err表示任何在获取路径或文件信息时发生的错误。
通过这个函数的定义,我们可以很方便地实现从根目录开始的递归遍历。下面是遍历整个目录的示例代码:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
root := "./"
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
fmt.Println(path)
return nil
})
if err != nil {
fmt.Println(err)
}
}
这个例子中遍历了当前目录下的所有文件和文件夹,并将其路径打印到控制台。
2. 递归遍历目录下所有文件
如果要在遍历目录的同时获取所有文件的路径,可以在遍历每个目录时判断其是否是文件,如果是文件,则将其路径加入到一个切片中,最终返回该切片。
下面是实现递归遍历目录下所有文件的示例代码:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
root := "./"
files := make([]string, 0)
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
files = append(files, path)
}
return nil
})
if err != nil {
fmt.Println(err)
}
for _, file := range files {
fmt.Println(file)
}
}
这个例子中,创建一个空切片files用于存储所有文件的路径,在遍历到目录时,判断其中每个文件是否是一个文件,如果是则将其路径加入到切片中。最终遍历完成后,遍历切片并将其中所有文件的路径打印到控制台上。
通过这两个示例,可以看到Golang使用filepath.Walk函数很容易实现递归遍历目录下所有文件的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Golang递归获取目录下所有文件方法实例 - Python技术站