Skip to content

Commit 3f9593e

Browse files
authored
Merge pull request #199 from RecoveryAshes/master
修复批量查询功能中的WaitGroup死锁问题
2 parents 00c7bf7 + e7ca901 commit 3f9593e

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
module github.com/wgpsec/ENScan
22

3-
go 1.24.0
4-
5-
toolchain go1.24.5
3+
go 1.23.0
64

75
require (
86
github.com/antchfx/htmlquery v1.2.4

runner/enscan.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,30 @@ import (
1313
// SearchByKeyWord 根据关键词筛选公司
1414
func (j *EnJob) SearchByKeyWord(keyword string) (string, error) {
1515
enList, err := j.job.AdvanceFilter(keyword)
16-
enMap := j.job.GetENMap()["enterprise_info"]
1716
if err != nil {
1817
gologger.Error().Msg(err.Error())
1918
return "", err
2019
}
21-
gologger.Info().Msgf("关键词:“%s” 查询到 %d 个结果,默认选择第一个 \n", keyword, len(enList))
20+
21+
// 检查搜索结果是否为空
22+
if len(enList) == 0 {
23+
gologger.Error().Msgf("关键词:\"%s\" 未查询到任何结果", keyword)
24+
return "", fmt.Errorf("关键词:\"%s\" 未查询到任何结果", keyword)
25+
}
26+
27+
enMap := j.job.GetENMap()["enterprise_info"]
28+
gologger.Info().Msgf("关键词:\"%s\" 查询到 %d 个结果,默认选择第一个 \n", keyword, len(enList))
2229
//展示结果
2330
utils.TBS(append(enMap.KeyWord[:3], "PID"), append(enMap.Field[:3], enMap.Field[10]), "企业信息", enList)
2431
// 选择第一个的PID
2532
pid := enList[0].Get(enMap.Field[10]).String()
33+
34+
// 检查PID是否为空
35+
if pid == "" {
36+
gologger.Error().Msgf("关键词:\"%s\" 获取到的PID为空", keyword)
37+
return "", fmt.Errorf("关键词:\"%s\" 获取到的PID为空", keyword)
38+
}
39+
2640
gologger.Debug().Str("PID", pid).Msgf("搜索")
2741
return pid, nil
2842
}
@@ -117,7 +131,6 @@ func (j *EnJob) getInfoList(pid string, em *common.EnsGo, sk string, ref string)
117131
gologger.Info().Msgf("正在获取 ⌈%s⌋ 第⌈%d/%d⌋页\n", em.Name, i, pages)
118132
d, e := j.getInfoPage(pid, i, em)
119133
if e != nil {
120-
// TODO 这里后续考虑加入重试机制,或者是等任务跑完可以再次尝试
121134
gologger.Error().Msgf("GET ⌈%s⌋ 第⌈%d⌋页失败\n", em.Name, i)
122135
continue
123136
}

runner/runner.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,32 @@ func (q *ESJob) processTask(task ENJobTask) {
179179
} else {
180180
pid, err = enJob.SearchByKeyWord(keyword)
181181
if err != nil {
182-
gologger.Error().Msg(err.Error())
182+
gologger.Error().Msgf("搜索关键词失败:%s,跳过该任务", err.Error())
183+
// 即使搜索失败,也要确保任务能够继续
184+
enJob.enWg.Done() // 先调用Done(),然后再Wait()
185+
enJob.enWg.Wait()
186+
// 创建一个空的结果数据,避免程序卡住
187+
rdata := map[string][]map[string]string{
188+
"enterprise_info": {},
189+
}
190+
q.ch <- rdata
191+
q.wg.Done()
192+
return
183193
}
184194
}
185195
// 获取企业信息,通过查询到的信息
186196
if err = enJob.getInfoById(pid, q.op.GetField); err != nil {
187-
gologger.Error().Msgf("获取企业信息失败:%s", err.Error())
197+
gologger.Error().Msgf("获取企业信息失败:%s,跳过该任务", err.Error())
198+
// 即使获取企业信息失败,也要确保任务能够继续
199+
enJob.enWg.Done() // 先调用Done(),然后再Wait()
200+
enJob.enWg.Wait()
201+
// 创建一个空的结果数据,避免程序卡住
202+
rdata := map[string][]map[string]string{
203+
"enterprise_info": {},
204+
}
205+
q.ch <- rdata
206+
q.wg.Done()
207+
return
188208
}
189209
}
190210
}

0 commit comments

Comments
 (0)