当前位置: 首页 > 面试题库 >

Golang闭包从范围中捕获错误的值

缪远航
2023-03-14
问题内容

测试代码如下:

func main() {
    lans := [5]string{"java", "python", "erlang", "cpp", "go"}
    fin := make(chan bool)
    for _, l := range(lans) {
        go func() {
            fmt.Println(l)
            }()
    }
     <- fin
}

我认为输出将是:java,python,erlang,cpp,go;但是输出是:go go go go go; 怎么了


问题答案:

就是这样写函数,把动词l变成函数

 go func(l string) {
     fmt.Println(l)
 }(l)


 类似资料:
  • 闭包本身是相当灵活的,可以实现所需功能来让闭包运行而不用类型标注(原文:Closures are inherently flexible and will do what the functionality requires to make the closure work without annotation)。这允许变量捕获灵活地适应使用 情况,有时是移动(moving)有时是借用(borro

  • 问题内容: 这是我的代码(运行): 输出: 问题:第2部分和第3部分有什么区别?为什么第2部分输出“ 44444”而不是“ 43210”? 问题答案: “第2部分”闭包捕获变量“ i”。当闭包(稍后)中的代码执行时,变量“ i”具有在range语句的最后一次迭代中具有的值,即。‘4’。因此 输出的一部分。 “第3部分”在其闭包中未捕获任何外部变量。如规格所述: 每次执行“ defer”语句时,将照

  • 问题内容: 我正在阅读“ CreateSpace Go 2012编程入门” 在第86页上,我发现了这种邪恶的魔力 1)为什么不复位?2)正在返回,或者是否如此聪明以至于它可以与所有东西配合使用? 问题答案: 为了清楚起见,我将为这两个函数分配名称: 工厂返回闭包–函数是Go中的一等公民,即它们可以是右手表达式,例如: 在您的代码中,闭包环绕工厂的上下文,这称为 词法作用域 。这就是变量在闭包内部可

  • 我在颤振中使用了一个很长的列表。所有项目都呈现良好,但我也收到以下错误: 以下是我的代码: 下面是我的方法: 下面是我的方法: 以下是错误的屏幕截图:

  • 我刚刚开始使用角度2。所以我尝试使用Web服务从数据库显示类别。 这是我的论坛.服务.ts文件 forum.component.ts: forum.component.html: 请帮忙,先谢了

  • 问题内容: 给出以下代码: 如何检测由于int64超出范围而导致函数失败?所述strconv.ParseInt函数返回一个错误类型,但在这种情况下,它实际上是一个strconv.NumError由所指示的类型。该错误处理和围棋的文章中提到,您可以使用类型断言来检查特定类型的错误,但它不会给任何实例。我应该使用什么表达式来完成此代码: 问题答案: 我们有, 软件包strconv ErrRange指示