【发布时间】:2021-10-28 01:22:05
【问题描述】:
我有一个循环,它对给定的键进行哈希处理并返回结果,但是在结果上,如果我有 1500 个进入循环的 URL 列表,它永远不会返回 1500 的结果,它总是返回小于1500.
我在下面做错了什么:
if len(URLLists) > 0 {
var base = "https://example.com/query?="
var wg sync.WaitGroup
var mutex = sync.Mutex{}
wg.Add(len(URLLists))
for _, url := range URLLists {
// wg.Add(1) OR above for loop
go func() {
defer wg.Done()
hmac := "HMAX_123"
out := encoding.HexEncodeURL(hmac, url)
final := base + out
list := Lists{
Old: url,
New: final,
}
mutex.Lock()
response.URL = append(response.URL, list)
mutex.Unlock()
}()
}
wg.Wait()
jR, err := json.Marshal(response)
if err != nil {
w.Write([]byte(`{"success": false, "url" : ""}`))
} else {
w.Write(jR)
}
return
}
我为Add 尝试了这两种方法 - 一个内循环为 1,一个外循环为总长度。
我希望函数返回所有 1500 个 URL 列表,而不仅仅是“700、977、1123”随机列表。
看起来 - wg.Wait() 没有等待所有 wg.Add - 添加
【问题讨论】:
-
如果在 go 例程之前添加
url:= url会发生什么,或者更好的是,参数化 Go 例程 -
@DazWilkin - 解决了问题
-
@DazWilkin - 非常感谢您分享知识。 :)
-
不客气!很高兴它有帮助