在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)
}
在以上代碼中,我們使用一個goroutine池來遍歷目錄,該池中包含了5個goroutine。然后,我們通過filepath.Walk函數遍歷目錄,并將文件路徑發送到fileChan channel中。每個goroutine從fileChan中接收文件路徑,并進行處理。最后,我們關閉了fileChan channel。
請根據實際需求調整goroutine的數量和實現具體的文件處理邏輯。