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 关注
- 118 浏览
添加回答
举报
0/150
提交
取消