diff --git a/golang/for_trap.go b/golang/for_trap.go new file mode 100644 index 0000000000000000000000000000000000000000..204908e9322f642b7eeb682b7a60fe7a1ff9a914 --- /dev/null +++ b/golang/for_trap.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "time" +) + +func main() { + for i := 0; i <= 10; i++ { + go func() { + fmt.Println(i) //实际闭包中i是地址 匿名函数和中和外边共享的是同一个变量 + }() + + /*正确方法 + //方法一 + finalI := i //复制一个变量副本 (java写法) + go func() { + fmt.Println(finalI) + }() + + //方法二 + go func(paramI int) { //作为参数传递到匿名函数中(实际也是等同于使用副本) + fmt.Println(paramI) + }(i) + + */ + + } + + time.Sleep(5 * time.Second) +}