Go 言語でマルチスレッドでディレクトリをイテレートする方法
Go言語では、goroutineとchannelを使ってディレクトリのマルチスレッド走査を実現できます。以下に簡単なサンプルコードを示します。
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
dir := "path/to/directory" // 目录路径
fileChan := make(chan string) // 创建一个用于传递文件路径的channel
// 启动多个goroutine来遍历目录
for i := 0; i < 5; i++ {
go func() {
for file := range fileChan {
fmt.Println(file)
}
}()
}
// 遍历目录并将文件路径发送到channel中
filepath.Walk(dir, func(file string, info os.FileInfo, err error) error {
if !info.IsDir() {
fileChan <- file
}
return nil
})
// 关闭channel
close(fileChan)
}
上記コードでは、5つのgoroutineからなるgoroutineプールを使用してディレクトリを走査しています。その後、ディレクトリをfilepath.Walk関数で走査し、ファイルパスをfileChanチャネルに送信します。各goroutineはfileChanからファイルパスを受け取り、処理を行います。最後に、fileChanチャネルを閉じます。
実用的な要件に基づいてgoroutineの数と具体的なファイル処理ロジックのインプリメントを調整してください。