Golang中如何查找目录中的文件
Golang中如何查找目录中的文件 请帮忙,任务是在一个目录中查找特定扩展名的所有文件,我该如何实现?
6 回复
链接的文档提到,对于大型目录来说效率较低…
我在处理大型目录时(在Linux系统上)没有感觉到性能不足。可能对于真正非常大的目录来说效率会有所不足…
对于非常大的目录,你也可以使用 filepath.Walk。

例如这样:
package main
import (
"io/ioutil"
"log"
"os"
"strings"
)
func main() {
files, err := ioutil.ReadDir("./")
if err != nil {
log.Fatal(err)
}
target := []os.FileInfo{}
for _, f := range files {
if !f.IsDir() && strings.HasSuffix(f.Name(), ".go") {
target = append(target, f)
log.Println(f.Name())
}
}
}
但如果你能先提供你的代码会更好。
在Go语言中,可以使用标准库中的path/filepath和os包来遍历目录并查找特定扩展名的文件。以下是一个完整的实现示例:
package main
import (
"fmt"
"os"
"path/filepath"
"strings"
)
// 查找指定目录中特定扩展名的所有文件
func findFilesByExtension(rootDir, extension string) ([]string, error) {
var files []string
err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// 检查是否为文件且扩展名匹配
if !info.IsDir() && strings.EqualFold(filepath.Ext(path), extension) {
files = append(files, path)
}
return nil
})
return files, err
}
func main() {
// 示例:查找当前目录中所有的.txt文件
files, err := findFilesByExtension(".", ".txt")
if err != nil {
fmt.Printf("遍历目录时出错: %v\n", err)
return
}
fmt.Printf("找到 %d 个文件:\n", len(files))
for _, file := range files {
fmt.Println(file)
}
}
如果需要更精确的扩展名匹配(区分大小写),可以将strings.EqualFold替换为直接比较:
if !info.IsDir() && filepath.Ext(path) == extension {
files = append(files, path)
}
对于需要查找多种扩展名的情况:
func findFilesByExtensions(rootDir string, extensions []string) ([]string, error) {
var files []string
extMap := make(map[string]bool)
for _, ext := range extensions {
extMap[strings.ToLower(ext)] = true
}
err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
fileExt := strings.ToLower(filepath.Ext(path))
if extMap[fileExt] {
files = append(files, path)
}
}
return nil
})
return files, err
}
// 使用示例
files, err := findFilesByExtensions(".", []string{".txt", ".go", ".md"})
这个实现会递归遍历指定目录及其所有子目录,返回匹配指定扩展名的所有文件路径。

