登录
首页 >  Golang >  Go问答

传递变量至回调函数

来源:stackoverflow

时间:2024-02-24 23:54:25 258浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《传递变量至回调函数》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

selector变量传递到回调函数中的方法是?

for _, selector := range listSelector {
    c.OnHTML(selector, func(e *colly.HTMLElement) {
        fmt.Println(selector) // Similar outputs
    })
}

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


解决方案


根据回调执行的时间,您可能需要在块内创建迭代变量的副本并在闭包中使用它。

for _, selector := range listSelector {
    sel := selector // create a copy
    c.OnHTML(sel, func(e *colly.HTMLElement) {
        fmt.Println(sel) // Similar outputs
    })
}

如果回调被执行并且它在循环中的下一次迭代之前退出,则不需要执行此操作,但是如果稍后执行回调,则需要将迭代变量的副本传递给闭包。这是因为迭代变量被重用来保存迭代值,这意味着当前迭代中的变量值将被下一次迭代中的值覆盖。

来自spec

迭代变量可以通过“range”子句使用 短变量声明的形式 (:=)。在这种情况下,它们的类型是 设置为各个迭代值的类型,其范围为 “for”语句块; 它们在每次迭代中被重复使用。 如果迭代变量在“for”语句之外声明, 执行后,它们的值将是最后一次迭代的值。

如果您感兴趣,有关频道的 Effective Go 文档对此进行了更好的解释。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>