[经典BUG]golang闭包问题

问题描述

闭包问题常发生在定时任务启动上,例如本来想启动A,B,C,D四个任务,因为处理有误,导致起了4个D任务

问题解析

为什么在闭包中,类似定时任务会出现这个问题,可以看下面这个demo例子

func check(nums []int) error{
   
    //把闭包全部收集
    var arr [] func()
    //循环放闭包
    for _,num := range nums {
   
        //num := num
        fmt.Println(num)
        //闭包指的是这个匿名函数,他直接引用匿名函数外的变量
        //闭包指把函数外面的东西包进来,把匿名函数外的局部变量引入匿名函数内,但是没有立即执行
        arr = append(arr, func()

你可能感兴趣的:(BUG,bug,golang,开发语言)