golang遍历文件夹
时间: 2023-07-26 12:40:49 浏览: 53
可以使用标准库中的 filepath 包来遍历文件夹,示例代码如下:
```go
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
root := "/path/to/folder"
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
fmt.Printf("Directory: %s\n", path)
} else {
fmt.Printf("File: %s\n", path)
}
return nil
})
if err != nil {
fmt.Println(err)
}
}
```
其中,`filepath.Walk` 函数会递归遍历指定的目录,并对每个文件或文件夹执行指定的函数。在上面的代码中,我们定义了一个匿名函数来打印每个文件或文件夹的路径和类型。你可以根据自己的需求修改这个函数。
相关问题
golang 遍历文件夹的方法
在 Golang 中,遍历文件夹可以使用 `filepath.Walk` 函数,该函数可以递归遍历指定目录下的所有文件和子目录。除此之外,还可以使用 `os.ReadDir` 函数遍历一个目录下的所有文件和子目录。
下面是 `filepath.Walk` 和 `os.ReadDir` 的示例代码:
```go
package main
import (
"fmt"
"io/fs"
"os"
"path/filepath"
)
// 使用 filepath.Walk 遍历文件夹
func walkDir(path string) {
err := filepath.Walk(path, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
fmt.Printf("Directory: %s\n", path)
} else {
fmt.Printf("File: %s\n", path)
}
return nil
})
if err != nil {
fmt.Println(err)
}
}
// 使用 os.ReadDir 遍历文件夹
func readDir(path string) {
files, err := os.ReadDir(path)
if err != nil {
fmt.Println(err)
return
}
for _, file := range files {
if file.IsDir() {
fmt.Printf("Directory: %s\n", file.Name())
readDir(filepath.Join(path, file.Name()))
} else {
fmt.Printf("File: %s\n", file.Name())
}
}
}
func main() {
// 遍历当前目录
walkDir(".")
readDir(".")
}
```
上述代码会遍历当前目录下的所有文件和子目录,并输出每个文件和子目录的名称。你可以根据实际需求对遍历到的每个文件和子目录进行处理。
golang 遍历文件夹获取文件并发的处理文件
在 Golang 中,可以使用 `filepath.Walk` 函数遍历文件夹,并使用 channel 实现并发处理文件。
下面是一个示例代码:
```go
package main
import (
"fmt"
"io/ioutil"
"path/filepath"
)
func main() {
dir := "/path/to/dir"
fileChan := make(chan string)
go func() {
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
fileChan <- path
}
return nil
})
if err != nil {
fmt.Println(err)
}
close(fileChan)
}()
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
for file := range fileChan {
data, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println(err)
}
// 处理文件
fmt.Println(string(data))
}
wg.Done()
}()
}
wg.Wait()
}
```
上述代码会遍历指定目录下的所有文件并将它们的路径发送到 channel 中,然后启动 10 个 goroutine 并发处理文件。你可以根据实际需求调整 goroutine 数量。