Golang遍历目录: filepath.WalkDir vs filepath.Walk

在Golang中,filepath.Walkfilepath.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

WalkDirFuncWalkFunc 的主要区别在于第二个参数:

  • 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

Golang遍历目录: filepath.WalkDir vs filepath.Walk

原文地址: https://www.cveoy.top/t/topic/fzYM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录