selector是將變量傳遞給回調函數的方法嗎?for _, selector := range listSelector { c.OnHTML(selector, func(e *colly.HTMLElement) { fmt.Println(selector) // Similar outputs })}預期結果是輸出的不同選擇器。謝謝。
1 回答

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
根據回調執行的時間,您可能需要在塊內創建迭代變量的副本并在閉包中使用它。
for _, selector := range listSelector {
? ? sel := selector // create a copy
? ? c.OnHTML(sel, func(e *colly.HTMLElement) {
? ? ? ? fmt.Println(sel) // Similar outputs
? ? })
}
如果回調被執行并且它在循環中的下一次迭代之前退出,則不需要執行此操作,但是如果稍后執行回調,則需要將迭代變量的副本傳遞給閉包。這是因為迭代變量被重用來保存迭代的值,這意味著當前迭代中的變量值將被下一次迭代中的值覆蓋。
從規格來看:
迭代變量可以通過“range”子句使用短變量聲明(:=)的形式來聲明。在這種情況下,它們的類型設置為各自迭代值的類型,并且它們的范圍是“for”語句的塊;它們在每次迭代中都被重復使用。如果迭代變量在“for”語句之外聲明,則執行后它們的值將是最后一次迭代的值。
- 1 回答
- 0 關注
- 165 瀏覽
添加回答
舉報
0/150
提交
取消