为了账号安全,请及时绑定邮箱和手机立即绑定

将变量传递给回调函数

将变量传递给回调函数

Go
aluckdog 2023-07-31 15:14:26
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”语句之外声明,则执行后它们的值将是最后一次迭代的值。

查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信