将变量传递给回调函数

selector是将变量传递给回调函数的方法吗?


for _, selector := range listSelector {

    c.OnHTML(selector, func(e *colly.HTMLElement) {

        fmt.Println(selector) // Similar outputs

    })

}

预期结果是输出的不同选择器。谢谢。


aluckdog
浏览 119回答 1
1回答

守着星空守着你

根据回调执行的时间,您可能需要在块内创建迭代变量的副本并在闭包中使用它。for _, selector := range listSelector {    sel := selector // create a copy    c.OnHTML(sel, func(e *colly.HTMLElement) {        fmt.Println(sel) // Similar outputs    })}如果回调被执行并且它在循环中的下一次迭代之前退出,则不需要执行此操作,但是如果稍后执行回调,则需要将迭代变量的副本传递给闭包。这是因为迭代变量被重用来保存迭代的值,这意味着当前迭代中的变量值将被下一次迭代中的值覆盖。从规格来看:迭代变量可以通过“range”子句使用短变量声明(:=)的形式来声明。在这种情况下,它们的类型设置为各自迭代值的类型,并且它们的范围是“for”语句的块;它们在每次迭代中都被重复使用。如果迭代变量在“for”语句之外声明,则执行后它们的值将是最后一次迭代的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go