作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个简单的脚本,试图遍历文件系统并逐行读取文件以匹配正则表达式上的行:
package main
import (
"bufio"
"fmt"
"io/ioutil"
"log"
"os"
"regexp"
"sync"
)
type FileWithLine struct{
Line int
Path string
}
var set = map[string]FileWithLine{}
var rgx = regexp.MustCompile("ErrId\\s*:\\s*\"[[:alnum:]]+\"");
func traverseDir(d string, wg *sync.WaitGroup){
fmt.Println("traversing dir:", d)
if d == ".git"{
return
}
wg.Add(1)
go func(wg *sync.WaitGroup){
defer wg.Done()
files, err := ioutil.ReadDir(d)
if err != nil {
log.Fatal(err)
}
for _, f := range files {
fmt.Println("we see file:", f.Name())
if f.IsDir() {
traverseDir(f.Name(), wg)
return
}
file, err := os.Open(f.Name())
if err != nil {
log.Fatalf("failed opening file: %s", err)
}
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
var line = scanner.Text()
if rgx.MatchString(line) {
fmt.Println("line matches:", line);
}
}
file.Close()
}
}(wg)
}
func main() {
var wg sync.WaitGroup
traverseDir(".", &wg)
fmt.Println("Main: Waiting for workers to finish")
wg.Wait()
fmt.Println("Main: Completed")
}
traversing dir: .
Main: Waiting for workers to finish
we see file: .git
traversing dir: .git
Main: Completed
最佳答案
由于这些行,它正在停止处理:
if f.IsDir() {
traverseDir(f.Name(), wg)
return
}
traverseDir
也将返回。
关于go - 无法使用 WaitGroup 遍历文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60978538/
我是一名优秀的程序员,十分优秀!