Golang for循环内里面无法访问 外部变量

5 min read

在 Go 中,for 循环内部不能访问外部变量,但是你可以通过将该变量传递给循环的函数参数来访问它。

例如:

package main

import "fmt"

func main() {
    name := "John"
    numbers := []int{1, 2, 3}

    // 传递给匿名函数的参数为 i 和 num
    for i, num := range numbers {
        func(i, num int) {
            fmt.Printf("%d: %s %d\n", i, name, num)
        }(i, num)
    }
}

这里我们在 for 循环内部创建了一个匿名函数,并将外部变量 name 和循环计数器 i 作为参数传递给该函数。这样,我们就可以在函数内部访问这些变量。

另外一种方法是使用闭包:

package main

import "fmt"

func main() {
    name := "John"
    numbers := []int{1, 2, 3}

    // 使用闭包
    for i, num := range numbers {
        func() {
            fmt.Printf("%d: %s %d\n", i, name, num)
        }()
    }
}

在这个例子中,我们定义了一个没有参数的匿名函数,并在循环内部调用它。由于闭包可以访问外部变量,这里我们可以在函数内部访问变量 name 和 num。