Golang遍历目录: filepath.WalkDir vs filepath.Walk
Golang遍历目录: filepath.WalkDir vs filepath.Walk
在Golang中,filepath.Walk 和 filepath.WalkDir 都可以用来遍历目录树,但它们之间存在一些关键区别。本文将深入探讨这些差异,帮助您选择更合适的目录遍历方法。
filepath.Walk
filepath.Walk 函数递归遍历指定目录及其所有子目录,并为每个遇到的文件或目录调用用户提供的回调函数 (walkFn)。gofunc Walk(root string, walkFn filepath.WalkFunc) error
walkFn 函数签名如下:gotype WalkFunc func(path string, info fs.FileInfo, err error) error
walkFn 接收三个参数:
path: 当前文件或目录的路径。-info:fs.FileInfo类型的对象,包含文件或目录的详细信息 (例如:大小、权限等)。-err: 可能出现的错误。
filepath.WalkDir
filepath.WalkDir 函数与 filepath.Walk 类似,但使用不同的回调函数类型 (WalkDirFunc)。gofunc WalkDir(root string, walkFn filepath.WalkDirFunc) error
WalkDirFunc 函数签名如下:gotype WalkDirFunc func(path string, d fs.DirEntry, err error) error
WalkDirFunc 与 WalkFunc 的主要区别在于第二个参数:
d:fs.DirEntry类型的对象,提供文件或目录的基本信息,比fs.FileInfo更轻量级。
主要区别
- 性能:
filepath.WalkDir通常比filepath.Walk更高效,因为它使用更轻量级的fs.DirEntry接口,避免了不必要的系统调用。- 信息量:filepath.Walk提供更详细的文件信息 (fs.FileInfo),而filepath.WalkDir只提供基本信息 (fs.DirEntry)。
如何选择
- 如果您需要高性能的目录遍历,并且只需要文件或目录的基本信息,建议使用
filepath.WalkDir。- 如果您需要访问更详细的文件信息,例如文件大小、修改时间等,则必须使用filepath.Walk。
总结
在 Go 1.16 及更高版本中,推荐使用 filepath.WalkDir 进行目录遍历,因为它更高效且更轻量级。 只有在需要访问 fs.FileInfo 提供的额外文件信息时,才需要使用 filepath.Walk。
原文地址: https://www.cveoy.top/t/topic/fzYM 著作权归作者所有。请勿转载和采集!