How golang's “defer” capture closure's parameter?
问题 Here is my code (run): package main import "fmt" func main() { var whatever [5]struct{} for i := range whatever { fmt.Println(i) } // part 1 for i := range whatever { defer func() { fmt.Println(i) }() } // part 2 for i := range whatever { defer func(n int) { fmt.Println(n) }(i) } // part 3 } Output: 0 1 2 3 4 4 3 2 1 0 4 4 4 4 4 Question: What's the difference between part 2 & part 3? Why part 2 output "44444" instead of "43210"? 回答1: The 'part 2' closure captures the variable 'i'. When the